在我看来,应该有一种简单的方法可以在Swift中从String
到Int
进行可选转换,但我无法弄明白。
value
是String?
,我需要返回Int?
。
基本上我想这样做,但没有样板:
return value != nil ? Int(value) : nil
我试过这个,这似乎符合Swift的惯例,并且很简洁,但是它不能识别语法:
return Int?(value)
答案 0 :(得分:9)
您可以使用Optional
的{{3}}方法:
func foo(_ value: String?) -> Int? {
return value.flatMap { Int($0) }
}
如果value == nil
,则flatMap
会返回nil
。否则它
评估Int($0)
$0
是解包的值,
并返回结果(如果转换失败,则可以是nil
):
print(foo(nil) as Any) // nil
print(foo("123") as Any) // Optional(123)
print(foo("xyz") as Any) // nil
答案 1 :(得分:7)
您可以使用 nil coalescing operator ??
来展开String?
并使用您知道会生成""
的默认值nil
:
return Int(value ?? "")
另一种方法:采用String?
来自评论:
对我来说很奇怪,初始化程序不接受可选项,如果传入任何nil则只返回nil。
您可以为Int
创建自己的初始化程序,只执行以下操作:
extension Int {
init?(_ value: String?) {
guard let value = value else { return nil }
self.init(value)
}
}
现在你可以这样做:
var value: String?
return Int(value)
答案 2 :(得分:3)
使用String扩展名时,您不必担心string == nil
extension String {
func toInt() -> Int? {
return Int(self)
}
}
用法:
var nilString: String?
print("".toInt()) // nil
print(nilString?.toInt()) // nil
print("123".toInt()) // Optional(123)