当Swift中的值为n时,是否有指定占位符文本的快捷方式?
现在我做:
let myText:String!
if myDouble != nil{
myText = "\(myDouble!)"
}else{
myText = "Value not provided"
}
这很有效,但是必须一直这样做非常烦人。有没有办法做类似
的事情let myText:String = "\(myDouble ?? "Value no provided")"
失败是因为它想要一个默认的Double值,但我真的想要一个String值。
答案 0 :(得分:6)
您可以使用map
和nil-coalescing:
let myText = myDouble.map { String($0) } ?? "Value not provided"
如果myDouble
为nil
,则map
的结果为nil
,结果为??
之后的值。
如果myDouble
不是nil
,则结果是map
的输出,它会从Double
创建一个字符串。
有关详细信息,请参阅Swift标准库中map
枚举的Optional
函数的文档。
答案 1 :(得分:2)
这样做似乎很合理
let myDouble: Double? = Double(3.0)
let myText = myDouble?.description ?? "Value not provided"
如果myDouble
为nil
,则myText
为"Value not provided"
。如果myDouble
不是nil
,则会为其分配数字的字符串表示形式。
答案 2 :(得分:1)
我认为好的方法是将Extension设为可选,其中Double是Wrapped元素:
extension Optional where Wrapped == Double {
var stringValue: String {
guard let me = self else { return "No Value Provided" }
return "\(me)"
}
}
// Use it like this:
myDouble.stringValue
另一种方法可能是让您的自定义运算符如下:
public func ??(rhd: Double?, lhd: String) -> String {
if let unwrapped = rhd {
return String(unwrapped)
} else {
return lhd
}
}
现在您的专栏let myText:String = "\(myDouble ?? "Value no provided")"
正常运作。
如果你没有,请现在就告诉我。了解任何事情。
答案 3 :(得分:0)
这应该有效:
let myText = myDouble != nil ? String(myDouble!) : "Value not provided"