在Swift中将Int转换为String


553

我正在尝试找出如何在Swift中将Int转换为String

我想出一种解决方法,NSNumber但我很想弄清楚如何在Swift中做到这一点。

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

Answers:


960

转换IntString

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

而另一种方式-转换StringInt

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)

2
在此过程中,请使用toString下面的答案中所示的功能。
ybakos 2015年

2
InttoString()至少在Xcode 6.2编辑中似乎没有方法:我看到有一个全局toString方法(not Int.toString()),有人知道使用String()构造函数的好处吗?
Nilloc

请注意,String(Int?)至少在Swift 2 中写了“ Optional(Int)”,这并不是您的意思。改用Int?.description
Teejay

很棒,但是对我不起作用。我有一个可选的Int,并且String(myInt)无法编译-它声称“ Int?无法转换为String”。没有对我可用的toString()或toInt()方法,或者不存在stringValue和intValue。甚至一个String(myInt!)也会告诉我,初始化程序已重命名为类似String(describing:myInt!)的名称。
Motti Shneor

9
对于Swift 4,请参见下面的Hamed Gh的答案。正确用法是String(describing: x)
David Gay

92

检查以下答案:

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

45
恩,当String已经有构造函数接受时,这是一个丑陋且不必要的解决方法Int
Gabriele Petronella 2014年

3
你怎么发现这个错?你为什么拒绝投票?@GabrielePetronella
PREMKUMAR 2014年

2
这只是获得理想结果的一种糟糕方法。从技术上来说,答案是正确的,因此,我没有投票。
加布里埃尔·彼得罗内拉2014年

我认为这不是特别丑陋,只是某些解析工具可能无法很好地处理字符串插值。否则,谁知道-可能会更快。例如,在Javascript中使用“” + x通常比使用String构造函数更快。这个例子只短了几个字符,但是如果您要用多个变量构造一个句子,我当然更喜欢字符串插值。
Desty 2014年

1
我不会因为这个丑陋的答案而拒绝投票,但是正如@GabrielePetronella所说,当String有一个接受的构造函数时,不需要使用字符串插值Int。它更加清晰和简洁。
Isuru

58

这是4种方法:

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

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


5
我只是在Swift和iOS 8上观看了斯坦福大学的一些新课程。您的var ss = "\(x)"例子正是他们建议如何将双精度转换为字符串的例子。我认为这很容易而且很棒。
markhunte 2015年

再想想无礼的话-真的很糟糕。
伊恩·布拉德伯里

2
toString已重命名为String
Jirson Tavera

1
s现在是(Swift 3.1)String(描述:x),较旧的语法会产生编译器错误。
Motti Shneor

3
@MottiShneor不,这是错误的。String(describing:)除调试外,不得将其用于其他任何用途。它不是普通的String初始化器。
埃里克·艾雅

55

在Swift 3.0中

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

7
错了 String(describing:)除调试外,不得将其用于其他任何用途。它不是普通的String初始化器。
埃里克·艾雅

在Swift 5中这仍然是错误的吗?@ayaio,由于文档的原因,它似乎没有错
Zonily Jame

27

斯威夫特4

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

Developer.Apple.com>字符串> init(描述:)

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

自定义字符串可转换

在此处输入图片说明


3
结果可选(1)
Harshil Kotecha,

11
错了 String(describing:)除调试外,不得将其用于其他任何用途。它不是普通的String初始化器。
埃里克·艾雅

3
Hamed Gh,Morithz已经在同一问题中提供了正确答案检查我的答案只需使用常规的String()初始化程序即可。但是,请不要给它一个可选的,先打开包装的包装。或者,就像您的示例一样,使用??。像这样:let str = String(x ?? 0)
Harshil Kotecha

2
@HamedGh查看您给自己的链接中的示例。describing这里的方法是... 描述其内容。它给出了描述。有时与转换相同,有时不同。提供一个可选项describing,您将看到结果……这将不是转换。有一种简单的专用转换方式:使用普通的String初始化程序,如其他答案所述。阅读完整的页面链接到:看到此方法搜索说明使用不同的方式,如果你希望其中的一些会给出错误的结果准确的转换..
埃里克·绫

2
您确实应该删除此答案的描述部分。不应在String构造函数中使用任何参数名称的情况下进行转换。
TimTwoToes

26

仅出于完整性考虑,您还可以使用:

let x = 10.description

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


5
尝试在标签中显示值时,这对我有用。使用其他方法,它始终是Optional(0)而不是0。谢谢
Hardcore_Graverobber

11

斯威夫特4:

尝试不带Optional()的标签显示值字的值。

这里x是使用的Int值。

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

3
编号String(describing:)除调试外不得用于其他任何用途。它不是普通的String初始化器。
埃里克·艾雅

您好@Moritz,那么我该如何删除可选单词?我具有Int值,并且我想在标签上打印
Harshil Kotecha,

只需使用普通的String()初始化程序即可。但是,请不要给它一个可选的,先打开包装的包装。或者,例如在您的示例中,使用??。像这样:let str = String(x ?? 0)
Eric Aya


它主要用于调试目的。您可以描述类的名称,获取实例的描述等。但是,切勿将其用于应用程序本身中使用的字符串。
Eric Aya

8

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

extension Int
{
    func toString() -> String
    {
        var myString = String(self)
        return myString
    }
}

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

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

可能是愚蠢的问题,但这应该是函数还是计算变量?我不记得Swift在这些情况下通常使用哪个-是toInt还是toInt()
莫里·马克维兹

1
为了节省时间和麻烦,请使用myNumber.description。无需任何扩展。
纽约,

8

swift 3.0中,这就是我们如何转换IntString和的String方式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)!

1
在代码的最后一行,为什么我们最后需要一个感叹号?
奥马尔·塔里克

@OmarTariq,因为我们明确告诉编译器integerValue的类型为Int。则不能为其设置nil值。所以编译器告诉您解开它。如果您想避免这种情况,请像使用它let integerValue = Int(stringValue)。这样您就不会有问题。这么晚才回复很抱歉。
Chanaka火山口

1
@OmarTariq在这种情况下展开可能真的很糟糕。如果字符串不是数字,这将使您的应用程序崩溃。您应该真正检查以确保其有效,而不是强行打开包装。
查理·菲什

7

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

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


4

斯威夫特2:

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

2

我使用这种简单的方法

字符串到整数:

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

从Int到String:

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

2

将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
Suragch'1


0

将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)"


0

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

let a:String = String(stringInterpolationSegment: 15)

另一种方法是

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

//或任何代替15的整数


1
从API参考中“不要直接调用此初始化程序。在解释字符串插值时,编译器将使用它。” 可能是您想再次检查是否在某处使用它。
拉胡尔·夏尔马

0

我更喜欢使用字符串插值

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

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

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

0

如果您喜欢快速扩展,可以添加以下代码

extension Int
{
    var string:String {
        get {
            return String(self)
        }
    }
}

然后,您可以通过刚添加的方法来获取字符串

var x = 1234
var s = x.string


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.