Swift - 在一行代码中完成的文本字符串检查中的数字

时间:2016-04-26 20:54:28

标签: swift macos nsnumberformatter syntactic-sugar

您好我在osx应用首选项窗格中有很多字段要检索字符串,检查它是否是有效数字,如果是,请使用它。像这样:

if let tS = NSNumberFormatter().numberFromString(sizeTextfield.stringValue) {
    pref.thumbnailSize = Float(tS)
}

我希望能够像以下一样做到这一点:

pref.thumbnailSize = (let tS = NSNumberFormatter().numberFromString(sizeTextfield.stringValue) != nil) ? Float(tS) : self.pref.thumbnailSize

但是XCode并不喜欢它。

我只是想通过重用中间人来减少冗长......

我能做到:

pref.thumbnailSize = NSNumberFormatter().numberFromString(self.thumbnailSizeTextfield.stringValue) != nil ? Float(NSNumberFormatter().numberFromString(self.thumbnailSizeTextfield.stringValue)) : pref.thumbnailSize

但是使NSNumberFormatter调用两次而不是在第一次调用后缓存该值...

我觉得可能有某种语法糖快捷键(结合使用??运算符)可以在这里用来进一步压缩它,但我无法想到它。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这个怎么样:

pref.thumbnailSize = NSNumberFormatter().numberFromString(sizeTextfield.stringValue)?.floatValue ?? 0

您可以提供您想要使用的任何默认值,而不是0。如果您希望pref.thumbnailSizenumberFromString返回nil时保持不变,请使用:

pref.thumbnailSize = NSNumberFormatter().numberFromString(sizeTextfield.stringValue)?.floatValue ?? pref.thumbnailSize