在以下示例中,是否有更好的方法来分配DEF?我想将类型A转换为类型B,但是只要我能保持零可能性。
但是,似乎无法绊倒更好的方法。建议?class ABC {
var DEF: Int?
func X (someValue: Int8?) {
DEF = someValue != nil ? Int(someValue) : nil
}
}
答案 0 :(得分:2)
斯威夫特1:
class ABC {
var DEF: Int?
func X (someValue: Int8?) {
DEF = someValue.map{Int($0)}
}
}
斯威夫特2:
class ABC {
var DEF: Int?
func X (someValue: Int8?) {
DEF = someValue.map(Int.init)
}
}
map()
接受一个可选项,将其解包,然后对其应用函数。如果可选解析为nil,map()
将返回nil。
答案 1 :(得分:1)
您正在描述可选的map
:
var i: Int? = 2
let j = i.map { $0 * 2 } // j = .Some(4)
i = nil
let k = i.map { $0 * 2 } // k = nil
将此地图视为数组或其他集合映射,其中可选项是具有零(nil
)或一(非nil
)元素的集合。
注意,如果您要执行的操作本身返回一个可选项,则需要flatMap
以避免获得双重选项:
let s: String? = "2"
let i = s.map { Int($0) } // i will be an Int??
let j = s.flatMap { Int($0) } // flattens to Int?