在我看来,应该有一个简单的方法在Swift中进行从a String到a的可选转换,Int但我无法弄明白.
value是一个String?,我需要返回一个Int?.
基本上我想这样做,但没有样板:
return value != nil ? Int(value) : nil
Run Code Online (Sandbox Code Playgroud)
我试过这个,这似乎符合Swift的惯例,并且会很简洁,但它不能识别语法:
return Int?(value)
Run Code Online (Sandbox Code Playgroud)
您可以使用以下flatMap()方法Optional:
func foo(_ value: String?) -> Int? {
return value.flatMap { Int($0) }
}
Run Code Online (Sandbox Code Playgroud)
如果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
Run Code Online (Sandbox Code Playgroud)
您可以使用nil coalescing运算符 ??来解包String?并使用""您知道将生成的默认值nil:
return Int(value ?? "")
Run Code Online (Sandbox Code Playgroud)
另一种方法:Int初始化器 String?
来自评论:
对我来说很奇怪,初始化程序不会接受一个可选项,如果传入任何nil则只返回nil.
您可以为此创建自己的初始化Int程序:
extension Int {
init?(_ value: String?) {
guard let value = value else { return nil }
self.init(value)
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以这样做:
var value: String?
return Int(value)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1902 次 |
| 最近记录: |