可选基元类型的字符串初始值设定项:Int?双?浮动?等

时间:2018-05-16 15:55:29

标签: ios swift string initialization type-systems

是否可以为所有上述类型添加扩展名而不单独指定每种类型?

例如,以下是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)

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

2 个答案:

答案 0 :(得分:4)

你的意思是这样吗

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

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

答案 1 :(得分:3)

不要声明自定义初始值设定项,只需使用map将值映射到String,如下所示:

let optDouble: Double? = nil
let optionalDoubleString = opt.map { String($0) }
let optInt: Int? = nil
let optionalIntString = opt.map { String($0) }