0

这两个代码片段有什么区别?

cellModels.append(contentsOf: [].compactMap { $0.condition ? .init(text: $0.text, backgroundColor: $0.color, action: $0.action) : nil })


cellModels.append(contentsOf: [].compactMap {
            if $0.condition {
                return .init(text: $0.text, backgroundColor: $0.color, action: $0.action)
            } else {
                return nil
            }
        })

更新到 Xcode 12.5 后,第一个代码不再编译

Playground 的一些代码片段。在 Xcode 12.5 中尝试

struct SomeStruct {
var str: String
}
var arr1: [SomeStruct] = []
arr1.append(contentsOf: ["123123", "2", "332", "124r132q", "123"].compactMap { $0.count == 3 ? .init(str: $0) : nil })
arr1.append(contentsOf: ["123123", "2", "332", "124r132q", "123"].compactMap {
                if $0.count == 3 {
                    return .init(str: $0)
                } else {
                    return nil
                }})
4

1 回答 1

0

将代码分成两部分有帮助

var mappedArray: [SomeStruct] = ["123123", "2", "332", "124r132q", "123"].compactMap { $0.count == 3 ? .init(str: $0) : nil }

arr1.append(contentsOf: mappedArray)
于 2021-06-02T05:36:19.110 回答