函数编程中非可选数组的可选对象



我有一个类型为1的可选对象1。我想将它转换为Type2的数组(非可选,如果object1为nil,则为空(。

Type2对象是用Type1对象构造的。

所以我试过这样做:


func convert(object1: Type1?) -> [Type2] {
object1.map {
[
Type2($0)
] 
}
}

但我得到了这个错误:

Cannot convert return expression of type '[Type2]?' to return type '[Type2]'

注意:Type2初始化程序不能将可选值作为参数。

如果有人有想法,请提前感谢

您得到的错误意味着,当您映射一个可选值时,您将得到映射的结果(Type2室内示例的数组(,或者如果初始值(对象(为nil,则得到nil。在这种情况下,您可以使用nil coalesing运算符来给出一个值来替换nil(在这种情况中是一个空数组(:

func convert(object: Type1?) -> [Type2] {
object.map { [Type2($0)] } ?? []
}

另一种可能的方法是:

func convert(object: Type1?) -> [Type2] {
[object]
.compactMap { $0 }
.map { Type2($0) }
}

尝试

func convert(object1: Type1?) -> [Type2] {
guard let res = object1 else { return [] }
return [Type2(res)]
}
class Type1 {}
class Type2 {
init(_ type1: Type1) {
}
}
func convert(object1: Type1?) -> [Type2] {
if let object1 = object1 {
return [Type2(object1)]
}
return []
}

最新更新