swift - 可选的链接和合并,包括。函数参数

标签 swift swift4 null-coalescing optional-chaining

可选链让我们根据对象的存在做出决定:

var text : String?
let len = text?.lengthOfBytes(using: .utf8) ?? 0

它总是将 len 设置为一个整数。

对于非可选函数参数是否可能有类似的东西?考虑以下示例,该示例使用三元运算符已经不够优雅。

func length(text: String) -> Int {
    return text.lengthOfBytes(using: .utf8)
}

var text : String?
let len = (text != nil) ? length(text!) : 0

如果我们继续链接,它很容易变得一团糟(这就是我实际看到的):

let y = (arg!= nil) ? (foo?.bar(arg!) ?? 0) : 0 // how to improve on this?

此外,它也开始变得冗余,定义了两次默认值。

最后一行有没有更简洁的解决方案?

最佳答案

map 方法是最好的方法。 flatMap 也可能很有趣。

func length(text: String) -> Int {
    return text.lengthOfBytes(using: .utf8)
}

var text : String?
let len = text.map(length) ?? 0

如果你有多个参数,你可以很容易地写一个函数 (A?, B?) -> (A, B)?

关于swift - 可选的链接和合并,包括。函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48076179/

相关文章:

swift - 在 Swift 4 中使用reduce 连接数组和条件

c# - 向 SQL Server 发送空参数

swift4 - 在 Swift 4 中使用 Anyobject 和 Codable

Swift 4 Firebase .childAdded 未检索最新记录

javascript - JavaScript中有 "null coalescing"运算符吗?

ios - Xcode 6 UITableView 使 View 变黑

ios - 该 View 是 Iphone XS Max、Iphone 11 pro max 上的显示差异以及差异项目

macos - Swift if 语句不返回值

ios - 如何在模态呈现的表单 UIViewController 内计算 UIScrollView 的正确键盘 contentInset