gpt4 book ai didi

swift - 如何添加两个可选?

转载 作者:可可西里 更新时间:2023-11-01 01:10:00 24 4
gpt4 key购买 nike

我有 C++ 背景,但我正在学习 Swift 4 for MetalKit。因为我只习惯于 C++,所以对“可选”的整个关注对我来说有点陌生。在阅读 Apple 出版的 Swift 4 书籍时,我遇到了以下问题:

假设我有两个“字符串”a 和 b:

let a = "12"
let b = "24"

我想把这两个加在一起。写

是不好的做法并且是非法的
let c = Int(a) + Int(b)

因为 a 和 b 都是字符串,所以将它们类型转换为 Int 是可选的:转换可能已经失败。解决方案似乎是

if let c = Int(a), let d = Int(b)
{
let e = c + d
}

但这有点麻烦:与在 C 程序中相比,我复制的方式更多,在 C 程序中我可以简单地添加 a 和 b,然后测试结果是否有值。是否有更有效、更好的方法来执行此添加?

最佳答案

正如@rmaddy 在他的评论中所说,这就是可选值的全部意义所在。它应该让您努力工作,从而产生更安全的代码。

如果您愿意做一些前期工作,您可以创建一个自定义运算符,如果转换为 Int 的结果为 nil<,该运算符将抛出错误:

enum Err: Error {
case nilValue
}

func +(lhs: String, rhs: String)throws -> Int {
guard let c = Int(lhs), let d = Int(rhs) else {
throw Err.nilValue
}
return c + d
}

(您可能需要将 中缀运算符 + 添加到此代码段。)

然后你可以像这样使用它:

do {
let i: Int = try a + b
print(i)
} catch {
// Catch error here
}

或者使用try?。如果抛出错误,这将返回 nil:

let i: Int? = try? a + b

如果你不想使用类型注释,你可以给运算符一个不同的名字,即:

infix operator +?: AdditionPrecedence
func +?(lhs: String, rhs: String)throws -> Int

关于swift - 如何添加两个可选?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47932790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com