Xcode 12.5 编译器错误,'nil' 不能在需要类型 'someType' 的上下文中使用
Xcode 12.5 compiler bug, 'nil' cannot be used in context expecting type 'someType'
这两个代码片段有什么区别?
cellModels.append(contentsOf: [].compactMap { [=13=].condition ? .init(text: [=13=].text, backgroundColor: [=13=].color, action: [=13=].action) : nil })
cellModels.append(contentsOf: [].compactMap {
if [=13=].condition {
return .init(text: [=13=].text, backgroundColor: [=13=].color, action: [=13=].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 { [=14=].count == 3 ? .init(str: [=14=]) : nil })
arr1.append(contentsOf: ["123123", "2", "332", "124r132q", "123"].compactMap {
if [=14=].count == 3 {
return .init(str: [=14=])
} else {
return nil
}})
将代码分成两部分有帮助
var mappedArray: [SomeStruct] = ["123123", "2", "332", "124r132q", "123"].compactMap { [=10=].count == 3 ? .init(str: [=10=]) : nil }
arr1.append(contentsOf: mappedArray)
这两个代码片段有什么区别?
cellModels.append(contentsOf: [].compactMap { [=13=].condition ? .init(text: [=13=].text, backgroundColor: [=13=].color, action: [=13=].action) : nil })
cellModels.append(contentsOf: [].compactMap {
if [=13=].condition {
return .init(text: [=13=].text, backgroundColor: [=13=].color, action: [=13=].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 { [=14=].count == 3 ? .init(str: [=14=]) : nil })
arr1.append(contentsOf: ["123123", "2", "332", "124r132q", "123"].compactMap {
if [=14=].count == 3 {
return .init(str: [=14=])
} else {
return nil
}})
将代码分成两部分有帮助
var mappedArray: [SomeStruct] = ["123123", "2", "332", "124r132q", "123"].compactMap { [=10=].count == 3 ? .init(str: [=10=]) : nil }
arr1.append(contentsOf: mappedArray)