返回的Swift函数 - > String返回可选字符串

时间:2016-10-07 13:41:19

标签: swift time

我有一个计算日期的函数:

Test.describe("wallpaper",function() {
Test.it("Basic tests",function() { 
  testing(wallpaper(6.3, 4.5, 3.29), 16);
  testing(wallpaper(7.8, 2.9, 3.29), 16);
  testing(wallpaper(6.3, 5.8, 3.13), 17);
  testing(wallpaper(6.1, 6.7, 2.81), 16);
})})enter code here

然后我调用/设置功能如下:

func getFutureTime(_ timestamp: Double) -> String {
......
return "\(diffDateComponents.day) days"

}

但时间会显示为:

futureTimeLabel.text = " \(Date().getFutureTime(timeStamp))"

我如何安全地解开它以使它不打印作为可选项?

2 个答案:

答案 0 :(得分:3)

可选是diffDateComponents.day

如果您真的非常确保day属性是值,您可以使用diffDateComponents.day!,例如:

return "\(diffDateComponents.day!) days"

否则,您可以使用??运算符设置默认值:

return "\(diffDateComponents.day ?? defaultDaysCount) days"

或者,最佳解决方案:

if let days = diffDateComponents.day {
    return "\(days) days"
} else {
    return "Default message, when there're no days in future. The End is nigh, I guess…"
}

答案 1 :(得分:1)

你的问题不是函数返回类型,它在这一行:

return "\(diffDateComponents.day) days"

diffDateComponents.day是一个可选的Int,所以当你创建返回字符串时,它会像你看到的那样解释它。

在创建返回字符串之前将所需的可选项解压缩为/以解决此问题。例如

return "\(diffDateComponents.day!) days"