来自可选Double的Swift字符串

时间:2018-01-15 23:07:47

标签: swift

当Swift中的值为n时,是否有指定占位符文本的快捷方式?

现在我做:

let myText:String!
if myDouble != nil{
  myText = "\(myDouble!)"
}else{
  myText = "Value not provided"
}

这很有效,但是必须一直这样做非常烦人。有没有办法做类似

的事情
let myText:String = "\(myDouble ?? "Value no provided")"

失败是因为它想要一个默认的Double值,但我真的想要一个String值。

4 个答案:

答案 0 :(得分:6)

您可以使用map和nil-coalescing:

let myText = myDouble.map { String($0) } ?? "Value not provided"

如果myDoublenil,则map的结果为nil,结果为??之后的值。

如果myDouble不是nil,则结果是map的输出,它会从Double创建一个字符串。

有关详细信息,请参阅Swift标准库中map枚举的Optional函数的文档。

答案 1 :(得分:2)

这样做似乎很合理

let myDouble: Double? = Double(3.0)
let myText = myDouble?.description ?? "Value not provided"

如果myDoublenil,则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"