【问题标题】:Difference between String interpolation and String initializer in SwiftSwift 中字符串插值和字符串初始化器的区别
【发布时间】:2016-07-30 16:13:22
【问题描述】:

我可以使用字符串插值或字符串初始化程序将 int、float、double 作为字符串读取。结果总是一样的。

var a: Int = 2

var c: Character = "e"

var d: String = "\(a)\(c)"

OR

var d: String = String(a) + String(c)

结果是一样的。 d 的值为“2e”

我发现唯一的区别是字符串插值()可以在双引号内使用,而String()不能在双引号内使用。

就这些了吗?我在这里遗漏了什么吗?

【问题讨论】:

    标签: swift string


    【解决方案1】:

    字符串插值"\(item)" 为您提供在项目上调用description 的结果。 String(item) 调用 String 初始化器并返回 String 值,这通常与您从字符串插值中获得的 String 相同,但不能保证。

    考虑以下人为设计的示例:

    class MyClass: CustomStringConvertible {
        var str: String
    
        var description: String { return "MyClass - \(str)" }
    
        init(str: String) {
            self.str = str
        }
    }
    
    extension String {
        init(_ myclass: MyClass) {
            self = myclass.str
        }
    }
    
    let mc = MyClass(str: "Hello")
    String(mc)  // "Hello"
    "\(mc)"     // "MyClass - Hello"
    

    【讨论】:

      猜你喜欢
      • 2011-07-24
      • 1970-01-01
      • 2017-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-18
      • 2015-01-31
      • 2018-05-04
      相关资源
      最近更新 更多