在Swift中将可选String转换为可选Int的最简单方法

dev*_*os1 8 optional swift

在我看来,应该有一个简单的方法在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)

Mar*_*n R 9

您可以使用以下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)


vac*_*ama 9

您可以使用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)