gpt4 book ai didi

swift - 在分配变量之前使用 guard-let 修改可能为 nil 的表达式

转载 作者:行者123 更新时间:2023-11-28 09:34:22 26 4
gpt4 key购买 nike

我希望使用guard-let 将一个变量赋值给一个表达式,但我想在赋值之前修改表达式。如果表达式为nil,则应进入else block ,否则应将变量赋值给f(expression)。这是我想做的一个例子:

let arr: [Int] = []
// Do stuff, maybe add elements to arr
guard let x = abs(arr.first) else { return } // Syntax error
// If arr was nonempty, then we want x = abs(arr.first!)

但是 Swift 不允许这种语法,因为 abs 需要一个非可选参数,而 arr.first 是可选的。那么有没有办法求值arr.first,然后如果不是nil就把abs(arr.first!)赋值给x?我知道我可以使用 if-let 或使用两个变量(一个来自 guard-let ,另一个被分配给该变量的绝对值) ).但是 guard-let 似乎是完成这项工作的工具,要是有某种方法可以做到这一点就好了。

最佳答案

let arr:[Int] = [-1,1,3,-9]
guard let x = arr.first.flatMap({ $0 < 0 ? -$0: $0 }) else { return }
// ...

或(根据 dfri 的注释更新)

// ....
let arr:[Int] = [-1,1,3,-9]
guard let x = arr.first.map(abs) else { return }

关于swift - 在分配变量之前使用 guard-let 修改可能为 nil 的表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36510163/

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