使用let的三元语法更好?

时间:2015-07-06 12:52:28

标签: swift

在以下示例中,是否有更好的方法来分配DEF?我想将类型A转换为类型B,但是只要我能保持零可能性。

但是,似乎无法绊倒更好的方法。建议?

class ABC {

  var DEF: Int?

  func X (someValue: Int8?) {
    DEF = someValue != nil ? Int(someValue) : nil
  }
}

2 个答案:

答案 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?