是否可以为所有上述类型添加扩展名而不单独指定每种类型?
例如,以下是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)
如果可以使用原始类型初始化字符串,我想允许使用可选类型进行字符串初始化。
答案 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) }