在 Swift 中将 Int 转换为 String

Posted

技术标签:

【中文标题】在 Swift 中将 Int 转换为 String【英文标题】:Convert Int to String in Swift 【发布时间】:2014-08-01 10:00:21 【问题描述】:

我正在尝试研究如何在 Swift 中将 Int 转换为 String

我想出了一个解决方法,使用 NSNumber,但我很想知道如何在 Swift 中完成这一切。

let x : Int = 45
let xNSNumber = x as NSNumber
let xString : String = xNSNumber.stringValue

【问题讨论】:

【参考方案1】:

Int 转换为String

let x : Int = 42
var myString = String(x)

反之亦然 - 将 String 转换为 Int

let myString : String = "42"
let x: Int? = myString.toInt()

if (x != nil) 
    // Successfully converted String to Int

或者,如果您使用的是 Swift 2 或 3:

let x: Int? = Int(myString)

【讨论】:

虽然这可行,但请使用toString 函数,如下面的答案所示。 Int 似乎没有 toString() 方法,至少在 Xcode 6.2 中没有编辑:我看到有一个全局 toString 方法(not Int.toString()),有人知道使用 String() 构造函数的优势吗? 请注意,String(Int?) 至少在 Swift 2 中写入“Optional(Int)”,这可能不是您的意思。改用Int?.description 很棒,但对我不起作用。我有一个可选的 Int,而 String(myInt) 不会编译 - 它声称“Int?不能转换为 String”。我也没有可用的 toString() 或 toInt() 方法,或者 stringValue 和 intValue 不存在。甚至 String(myInt!) 都会告诉我初始化器已重命名为 String(describing: myInt!)。 对于 Swift 4,请参阅下面 Hamed Gh 的回答。正确用法是String(describing: x)【参考方案2】:

检查以下答案:

let x : Int = 45
var stringValue = "\(x)"
print(stringValue)

【讨论】:

meh,当String 已经有一个接受Int 的构造函数时,这是一个丑陋且不必要的解决方法 你发现这个有什么问题吗?你为什么要投反对票? @GabrielePetronella 我不认为这特别难看,除了一些解析工具可能无法很好地处理字符串插值。否则,谁知道——它可能会更快。例如,在 javascript 中使用 ""+x 通常比使用 String 构造函数更快。这个例子只短了几个字符,但在你从多个变量构造一个句子的情况下,我当然更喜欢字符串插值。 我不会仅仅因为它丑陋而否决这个答案,但正如@GabrielePetronella 所说,当String 有一个接受Int 的构造函数时,不需要使用字符串插值。它更加清晰和简洁。 这怎么比数组字面量丑?【参考方案3】:

这里有4种方法:

var x = 34
var s = String(x)
var ss = "\(x)"
var sss = toString(x)
var ssss = x.description

我可以想象有些人会遇到 ss 的问题。但是,如果您要构建一个包含其他内容的字符串,那为什么不呢。

【讨论】:

我刚刚看了一些斯坦福大学关于 Swift 和 ios 8 的新课程。您的 var ss = "\(x)" 示例正是他们建议将双精度数转换为字符串的方式。我认为这很简单而且很棒。 更多地考虑 sass - 这真的很糟糕。 toString 已重命名为 String s 现在是 (Swift 3.1) String(describing: x) 旧语法会产生编译器错误。 @MottiShneor 不,这是错误的。 String(describing:) 不应该用于除调试以外的任何事情。它不是普通的 String 初始化器。【参考方案4】:

在 Swift 3.0 中

var value: Int = 10
var string = String(describing: value)

【讨论】:

这是错误的。 String(describing:) 不应该用于除调试以外的任何事情。它不是普通的 String 初始化器。 在 Swift 5 中这仍然是错误的吗? @ayaio,因为从文档来看它似乎没有错【参考方案5】:

Swift 4

let x:Int = 45
let str:String = String(describing: x)

Developer.Apple.com > String > init(describing:)

String(describing:) 初始化器是将任何类型的实例转换为字符串的首选方法。

Custom String Convertible

【讨论】:

结果可选(1) 这是错误的。 String(describing:) 不应该用于除调试以外的任何事情。它不是普通的 String 初始化器。 Hamed Gh, Morithz 已经在同一个问题中提供了正确答案检查我的答案只需使用普通的 String() 初始化程序。但不要给它一个可选的,先解包。或者,就像在您的示例中一样,使用 ??。像这样:让 str = String(x ?? 0) @HamedGh 查看您自己提供的链接中的示例。 describing 方法用于... 描述 其内容。它给出了描述。有时它与转换相同,有时不是。给describing 一个可选项,你会看到结果......这不会是一个转换。有一种简单的专用转换方法:使用普通的 String 初始化程序,如其他答案中所述。阅读您链接到的完整页面:查看此方法搜索 descriptions 使用不同的方式,如果您期望准确的转换,其中一些会给出错误的结果.. 您确实应该删除此答案的描述部分。转换应该在 String 构造函数中不使用任何参数名。【参考方案6】:

为了完整起见,您也可以使用:

let x = 10.description

或任何其他支持描述的值。

【讨论】:

当我试图在标签中显示值时,这对我有用。对于其他方法,它始终是 Optional(0) 而不是 0。谢谢【参考方案7】:

斯威夫特 4:

尝试在没有 Optional() 字词的情况下显示标签中的值。

这里 x 是一个 Int 值。

let str:String = String(x ?? 0)

【讨论】:

没有。 String(describing:) 不应该用于除调试以外的任何事情。它不是普通的 String 初始化器。 你好@Moritz 那么我该怎么做才能删除可选单词?我有一个 Int 值,而不是我想在标签中打印 只需使用普通的String() 初始化器即可。但不要给它一个可选的,先解包。或者,就像在您的示例中一样,使用??。像这样:let str = String(x ?? 0) developer.apple.com/documentation/swift/string/2427941-init 我明白你的意思,描述有什么用 主要用于调试目的。您可以描述类的名称,获取实例的描述等。但它不应该用于应用程序本身使用的字符串。【参考方案8】:

为了节省您将来的时间和麻烦,您可以进行 Int 扩展。通常我会创建一个共享代码文件,在其中放置扩展、枚举和其他有趣的东西。扩展代码如下所示:

extension Int

    func toString() -> String
    
        var myString = String(self)
        return myString
    

然后当您想将 int 转换为字符串时,您可以执行以下操作:

var myNumber = 0
var myNumberAsString = myNumber.toString()

【讨论】:

可能是个愚蠢的问题,但这应该是一个函数还是一个计算变量?我不记得在这些情况下通常使用哪一个 Swift - 是 toInt 还是 toInt() 为了节省一些时间和麻烦,只需使用myNumber.description。无需任何扩展。【参考方案9】:

swift 3.0 中,我们可以将Int 转换为StringString 转换为Int

//convert Integer to String in Swift 3.0

let theIntegerValue :Int = 123  // this can be var also
let theStringValue :String = String(theIntegerValue)


//convert String to Integere in Swift 3.0


let stringValue : String = "123"
let integerValue : Int = Int(stringValue)!

【讨论】:

在代码的最后一行,为什么最后需要一个感叹号? @OmarTariq,因为我们明确告诉编译器integerValue 的类型是Int。那么它不能有一个 nil 值。所以编译器告诉你解开它。如果您想避免这种情况,请像let integerValue = Int(stringValue) 一样使用它。那么你就不会遇到问题了。抱歉回复晚了。 @OmarTariq 在这种情况下展开可能非常糟糕。如果字符串不是数字,这将使您的应用程序崩溃。你真的应该检查以确保它是有效的,而不是强制打开它。【参考方案10】:

无论出于何种原因,接受的答案对我不起作用。我采用了这种方法:

var myInt:Int = 10
var myString:String = toString(myInt)

【讨论】:

【参考方案11】:

有多种方法可以做到这一点:

var str1:String="\(23)"
var str2:String=String(format:"%d",234)

【讨论】:

【参考方案12】:

斯威夫特 2:

var num1 = 4
var numString = "56"
var sum2 = String(num1) + numString
var sum3 = Int(numString)

【讨论】:

【参考方案13】:

我正在使用这种简单的方法

字符串到整数:

 var a = Int()
var string1 = String("1")
a = string1.toInt()

从 Int 到 String:

var a = Int()
a = 1
var string1 = String()
 string1= "\(a)"

【讨论】:

【参考方案14】:

将 Unicode Int 转换为字符串

对于那些想要将 Int 转换为 Unicode 字符串的人,您可以执行以下操作:

let myInteger: Int = 97

// convert Int to a valid UnicodeScalar
guard let myUnicodeScalar = UnicodeScalar(myInteger) else 
    return ""


// convert UnicodeScalar to String
let myString = String(myUnicodeScalar)

// results
print(myString) // a

或者:

let myInteger: Int = 97
if let myUnicodeScalar = UnicodeScalar(myInteger) 
    let myString = String(myUnicodeScalar)

【讨论】:

@jvarela,这仍然有效。我刚刚在 Xcode 8.2 (Swift 3.0.2) 中重新测试了它。 String 初始化器可以采用 UnicodeScalar【参考方案15】:

exampleLabel.text = String(yourInt)

【讨论】:

【参考方案16】:

我更喜欢使用String Interpolation

let x = 45
let string = "\(x)"

每个对象都有一些字符串表示。这使事情变得更简单。例如,如果您需要创建一些具有多个值的String。你也可以在其中做任何数学运算或使用一些条件

let text = "\(count) \(count > 1 ? "items" : "item") in the cart. Sum: $\(sum + shippingPrice)"

【讨论】:

【参考方案17】:
let intAsString = 45.description     // "45"
let stringAsInt = Int("45")          // 45

【讨论】:

【参考方案18】:

将 String 转换为 Int

var numberA = Int("10")

Print(numberA) // It will print 10

将 Int 转换为 String

var numberA = 10

第一种方式)

print("numberA is \(numberA)") // It will print 10

第二种方式)

var strSomeNumber = String(numberA)

var strSomeNumber = "\(numberA)"

【讨论】:

【参考方案19】:
let a =123456888
var str = String(a)

var str = a as! String

【讨论】:

【参考方案20】:

在 swift 3.0 中,您可以将整数更改为字符串,如下所示

let a:String = String(stringInterpolationSegment: 15)

另一种方法是

let number: Int = 15
let _numberInStringFormate: String = String(number)

//或任何代替15的整数

【讨论】:

来自 API 参考“不要直接调用这个初始化器。编译器在解释字符串插值时使用它。”可能你想仔细检查一下你是否在某处使用它。【参考方案21】:

如果你喜欢 swift 扩展,可以添加以下代码

extension Int

    var string:String 
        get 
            return String(self)
        
    

那么,就可以通过刚才添加的方法获取字符串了

var x = 1234
var s = x.string

【讨论】:

【参考方案22】:

关于性能的一点点 UI Testing Bundle 在带有 iOS 14 的 iPhone 7(真实设备)上

let i = 0
lt result1 = String(i) //0.56s 5890kB
lt result2 = "\(i)" //0.624s 5900kB
lt result3 = i.description //0.758s 5890kB
import XCTest

class ConvertIntToStringTests: XCTestCase 

    let count = 1_000_000
    
    func measureFunction(_ block: () -> Void) 
        
        let metrics: [XCTMetric] = [
            XCTClockMetric(),
            XCTMemoryMetric()
        ]
        let measureOptions = XCTMeasureOptions.default
        measureOptions.iterationCount = 5
        
        measure(metrics: metrics, options: measureOptions) 
            block()
        
    

    func testIntToStringConstructor() 
        var result = ""
        
        measureFunction 
            
            for i in 0...count 
                result += String(i)
            
        

    
    
    func testIntToStringInterpolation() 
        var result = ""
        
        measureFunction 
            for i in 0...count 
                result += "\(i)"
            
        
    
    
    func testIntToStringDescription() 
        var result = ""
        measureFunction 
            for i in 0...count 
                result += i.description
            
        
    

【讨论】:

【参考方案23】:
let Str = "12"
let num: Int = 0
num = Int (str)

【讨论】:

以上是关于在 Swift 中将 Int 转换为 String的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中将 Int 转换为字符

如何在 Swift 2.0 中将 HKQuanity 转换为 Int

如何在 Swift 2.0 中将 HKQuanity 转换为 Int

如何在swift中将'Date'类型的转换值返回为'String'

如何在 Swift 3 中将字典表示为 NSValue?

在 Swift 中将 bytes/UInt8 数组转换为 Int