可选原始类型的字符串初始值设定项:Int? 双倍的?漂浮?等等

Ric*_*hiy 1 string type-systems initialization ios swift

是否可以在不单独指定每种类型的情况下对上述所有类型进行扩展?

例如,这里是这样的扩展Double

extension String {
  init?(_ value: Double?) {
    if let nonOpt = value {
      self.init(nonOpt)
    } else {
      return nil
    }
  }
}


let nonOpt: Double = 1

let opt: Double? = 1

let string = String(opt)

print(string)
Run Code Online (Sandbox Code Playgroud)

如果可以使用原始类型初始化字符串,我想允许使用可选类型进行字符串初始化。

vad*_*ian 5

你的意思是这样吗

extension String {
    init?<T : CustomStringConvertible>(_ value : T?) {
        guard let value = value else { return nil }
        self.init(describing: value)
    }
}
Run Code Online (Sandbox Code Playgroud)

或者

extension String {
    init?<T : LosslessStringConvertible>(_ value : T?) {
        guard let value = value else { return nil }
        self.init(value)
    }
}
Run Code Online (Sandbox Code Playgroud)