在 Swift 中将 int 转换为字符串

Convert Int to String in Swift

提问人:Steve Marshall 提问时间:6/11/2014 最后编辑:Mike ChamberlainSteve Marshall 更新时间:2/7/2022 访问量:728038

问:

我正在尝试研究如何在 Swift 中将 a 转换为 a。IntString

我想出了一个解决方法,但我很想弄清楚如何在 Swift 中完成这一切。NSNumber

let x : Int = 45
let xNSNumber = x as NSNumber
let xString : String = xNSNumber.stringValue
字符串 转换 int 转换器 swift

评论


答:

1117赞 Shai 6/11/2014 #1

转换为 :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赞 ybakos 1/29/2015
虽然这可行,但请使用下面的答案中所示的函数。toString
2赞 Nilloc 4/13/2015
Int似乎没有方法,至少在 Xcode 6.2 编辑中没有:我看到有一个全局方法(不是),有人知道使用构造函数的优势吗?toString()toStringInt.toString()String()
0赞 Teejay 11/17/2015
请注意,至少在 Swift 2 中写“Optional(Int)”,这可能不是你的意思。请改用String(Int?)Int?.description
0赞 Motti Shneor 3/9/2017
太棒了,但对我不起作用。我有一个可选的 Int,而 String(myInt) 不会编译 - 它声称“Int?无法转换为 String”。我也没有可用的 toString() 或 toInt() 方法,或者 stringValue 和 intValue 不存在。即使是 String(myInt!) 也会告诉我初始值设定项已重命名为类似 String(describing: myInt!) 的东西。
11赞 David Gay 2/21/2018
对于 Swift 4,请参阅下面的 Hamed Gh 的回答。正确的用法是String(describing: x)
100赞 PREMKUMAR 6/11/2014 #2

请检查以下答案:

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

评论

50赞 Gabriele Petronella 6/11/2014
嗯,当已经有构造函数接受时,这是一个丑陋且不必要的解决方法StringInt
3赞 PREMKUMAR 6/11/2014
你觉得这有什么问题?你为什么要投票?@GabrielePetronella
0赞 Desty 6/12/2014
我不认为这特别丑陋,只是一些解析工具可能无法很好地处理字符串插值。否则,谁知道呢——它可能会更快。例如,在 Javascript 中使用 “”+x 通常比使用 String 构造函数更快。这个例子只短了几个字符,但是在你从几个变量构造一个句子的情况下,我当然更喜欢字符串插值。
1赞 Isuru 9/15/2014
我不会仅仅因为它丑陋而对这个答案投反对票,但正如@GabrielePetronella所说,当构造函数接受 .它更加清晰和简洁。StringInt
1赞 Jehan 3/2/2015
这怎么比数组文字更丑陋?
8赞 bkopp 12/14/2014 #3

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

var myInt:Int = 10
var myString:String = toString(myInt)
30赞 Mike Lischke 12/30/2014 #4

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

let x = 10.description

或支持说明的任何其他值。

评论

6赞 Hardcore_Graverobber 1/26/2017
当尝试在标签中显示值时,这对我有用。对于其他方法,它始终是 Optional(0) 而不是 0。谢谢
69赞 Ian Bradbury 1/29/2015 #5

这里有 4 种方法:

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

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

评论

5赞 markhunte 1/29/2015
我只是看了斯坦福大学关于Swift和iOS 8的一些新课程。您的示例正是他们建议将双精度转换为字符串的方式。我认为这很容易,很棒。var ss = "\(x)"
0赞 Ian Bradbury 1/29/2015
多想想飒爽——这真的很糟糕。
2赞 Jirson Tavera 3/4/2016
toString 已重命名为 String
1赞 Motti Shneor 3/9/2017
s 现在是 (Swift 3.1) String(describing: x) 旧语法会产生编译器错误。
5赞 Eric Aya 4/3/2018
@MottiShneor 不,这是错误的。 绝不应用于调试以外的任何其他用途。它不是普通的字符串初始值设定项。String(describing:)
6赞 Dhruv Ramani 2/6/2015 #6

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

var str1:String="\(23)"
var str2:String=String(format:"%d",234)
10赞 user2266987 3/17/2015 #7

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

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

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

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

评论

0赞 Maury Markowitz 2/11/2016
这可能是一个愚蠢的问题,但这应该是一个函数,还是一个计算变量?我不记得在这些情况下 Swift 通常使用哪一个 - 是它还是.toInttoInt()
1赞 nyg 8/16/2017
为了节省一些时间和麻烦,只需使用 .无需任何扩展。myNumber.description
3赞 Muraree Pareek 4/13/2015 #8

IAM 使用这种简单的方法

字符串转换为 int:

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

从 Int 到 String:

var a = Int()
a = 1
var string1 = String()
 string1= "\(a)"
2赞 Michael 5/10/2015 #9

exampleLabel.text = String(yourInt)

5赞 juanmorillios 9/16/2015 #10

斯威夫特 2:

var num1 = 4
var numString = "56"
var sum2 = String(num1) + numString
var sum3 = Int(numString)
0赞 Paulo Silva 1/18/2016 #11
let Str = "12"
let num: Int = 0
num = Int (str)
3赞 Suragch 9/22/2016 #12

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

评论

0赞 Suragch 1/2/2017
@jvarela,这仍然有效。我刚刚在 Xcode 8.2 (Swift 3.0.2) 中重新测试了它。初始值设定项可以采用 .StringUnicodeScalar
10赞 caldera.sac 10/9/2016 #13

Swift 3.0 中,这就是我们如何转换为和转换为IntStringStringInt

//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赞 Omar Tariq 3/4/2017
在代码的最后一行,为什么我们需要在末尾加一个感叹号?
0赞 caldera.sac 5/22/2017
@OmarTariq,因为我们明确告诉编译器 的类型是 .则不能有 NIL 值。所以编译器告诉你解开它。如果你想避免这种情况,请像 .那么你就不会有问题了。对不起,回复晚了。integerValueIntlet integerValue = Int(stringValue)
1赞 Charlie Fish 1/8/2018
@OmarTariq 在这种情况下,展开包装可能真的很糟糕。如果字符串不是数字,这将使应用程序崩溃。您应该真正检查以确保它是有效的,而不是强行解开它。
55赞 vbgd 12/3/2016 #14

在 Swift 3.0 中

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

评论

14赞 Eric Aya 3/31/2018
这是错误的。 绝不应用于调试以外的任何其他用途。它不是普通的字符串初始值设定项。String(describing:)
0赞 Zonily Jame 7/24/2019
这在 Swift 5 中仍然是错误的吗?@ayaio,因为根据文档,它似乎没有错
0赞 Krypt 11/11/2023
我想是这样吗?不过,它不应该用于各种原因,比如因为太强大而无法完成手上的任务
1赞 Anil Kukadeja 1/6/2017 #15

将 String 转换为 Int

var numberA = Int("10")

Print(numberA) // It will print 10

将 Int 转换为字符串

var numberA = 10

第一种方式)

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

第二种方式)

var strSomeNumber = String(numberA)

var strSomeNumber = "\(numberA)"
1赞 Dilip Jangid 2/8/2017 #16

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

let a:String = String(stringInterpolationSegment: 15)

另一种方式是

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

或任何整数代替 15

评论

1赞 Rahul Sharma 6/2/2017
来自 API 参考“请勿直接调用此初始值设定项。编译器在解释字符串插值时使用它。也许你想仔细检查你是否在某个地方使用它。
1赞 Amul4608 5/28/2017 #17
let a =123456888
var str = String(a)

var str = a as! String
31赞 Hamed Ghadirian 10/27/2017 #18

斯威夫特 4

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

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

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

自定义字符串可转换

enter image description here

评论

3赞 Harshil Kotecha 3/31/2018
result 可选(1)
20赞 Eric Aya 3/31/2018
这是错误的。 绝不应用于调试以外的任何其他用途。它不是普通的字符串初始值设定项。String(describing:)
3赞 Harshil Kotecha 4/29/2018
Hamed Gh,Morithz 已经在同一个问题中提供了正确答案,检查我的答案只需使用普通的 String() 初始值设定项即可。但不要给它一个可选的,先解开包装。或者,如您的示例所示,使用 ??.像这样:让 str = String(x ?? 0)
2赞 Eric Aya 8/29/2018
@HamedGh 看看你给自己的链接中的示例。方法在这里...描述其内容。它给出了一个描述。有时它与转换相同,有时则不然。给一个可选的,你会看到结果......这不会是皈依。有一种简单、专用的转换方法:使用普通的 String 初始值设定项,如其他答案中所述。阅读您链接到的完整页面:请参阅此方法使用不同的方式搜索说明,如果您期望准确的转换,其中一些方法会给出错误的结果。describingdescribing
2赞 TimTwoToes 2/19/2019
你真的应该删除这个答案的描述部分。转换时,应在 String 构造函数中不使用任何参数名称。
12赞 Harshil Kotecha 3/31/2018 #19

斯威夫特 4:

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

这里 x 是一个 Int 值,用于。

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

评论

5赞 Eric Aya 3/31/2018
不。 绝不应用于调试以外的任何其他用途。它不是普通的字符串初始值设定项。String(describing:)
0赞 Harshil Kotecha 3/31/2018
您好@Moritz那么我该怎么做才能删除可选单词?我有一个 Int 值,而不是我想在标签中打印
0赞 Eric Aya 3/31/2018
只需使用普通的初始值设定项即可。但不要给它一个可选的,先解开包装。或者,如您的示例所示,使用 .喜欢这个:String()??let str = String(x ?? 0)
0赞 Harshil Kotecha 3/31/2018
developer.apple.com/documentation/swift/string/2427941-init 我明白你的意思,描述有什么用
0赞 Eric Aya 3/31/2018
它主要用于调试目的。您可以描述类的名称,获取实例的描述等。但它绝不应用于应用本身中使用的字符串。
3赞 Robert Dresler 3/5/2019 #20

我更喜欢使用字符串插值

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

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

let text = "\(count) \(count > 1 ? "items" : "item") in the cart. Sum: $\(sum + shippingPrice)"
2赞 Lai Lee 8/3/2019 #21

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

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

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

var x = 1234
var s = x.string
7赞 Roi Zakai 4/24/2020 #22
let intAsString = 45.description     // "45"
let stringAsInt = Int("45")          // 45
6赞 yoAlex5 11/15/2020 #23

Swift String 性能

关于 iOS 7 的 iPhone 14(真实设备)的性能UI Testing Bundle

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
            }
        }
    }
}