快速的任何元素类型是一种好习惯吗?

时间:2019-01-04 10:26:38

标签: arrays swift generics

对任何元素类型进行快速转换是否是一种好习惯?

例如

let arrayObject = [Any]

let arrayObject  = [[String: String]]

2 个答案:

答案 0 :(得分:1)

Swift的强类型系统鼓励您始终尽可能特定于类型。请不要将Any用作无关类型。

我建议考虑此优先级列表(从高到低)

  1. 如果类型是已知的并且同质,请使用静态类型。
    例如,在JSON字典中,如果所有值为String,请始终使用[String:String]而不是[String:Any]
  2. 如果类型是异构的(例如,数组中的对象),并且仅包含少数已知类型,则使用通用协议。
  3. 尝试使用泛型。
  4. 使用Any

答案 1 :(得分:0)

当您知道Array元素的类型时,可以避免使用Any并使用直接数据类型。

例如:如果您持有String的数组,则可以直接定义String类型,如下所示。

var arrayObject = [String]()

如果要持有数组中未知类型的对象或数组中具有多种类型的对象,则可以使用Any

例如:如果将StringNSNumber放在同一数组中,则可以将Any定义为数组元素的类型,如下所示。

var arrayObject = [Any]()
arrayObject.append("Hundred")
arrayObject.append(NSNumber(value: 100))

let str = arrayObject[0] as! String
let number = arrayObject[1] as! NSNumber