Swift:可选的编码规则。这是swift的风格,返回零或[]

时间:2015-03-12 02:55:11

标签: ios swift coding-style

我在模型类中有一些查找方法。当数据为空时返回nil或[](空数组)之间哪个更好。请看下面的内容。我认为(2)更好,因为我不需要零检查。

(1) nil

func findAll() -> [Sample]? {
    return nil
}

if let results = DataManager().findAll() {
    self.results = results
}

(2) empty arrray

func findAll() -> [Sample] {
    if results.count > 0 {
      return results
    }
    return []
}

self.results    = DataManager().findAll()

更新

我改变了模型类的方法。

(1) nil

func findAll() -> [Sample]? {
    var results = context.executeFetchRequest(request, error: &error) as [Sample]
    if results.count > 0 {
      return results
    }
    return nil
}

if let results = DataManager().findAll() {
    self.results = results
}

(2) empty arrray

func findAll() -> [Sample] {
    var results = context.executeFetchRequest(request, error: &error) as [Sample]
    if results.count > 0 {
      return results
    }
    return []
}

self.results    = DataManager().findAll()

1 个答案:

答案 0 :(得分:1)

Optional是增强现有类型以表达“没有”这一概念的好方法。

集合,数组和树已经的集合具有该功能 - 空集合。

从返回集合类型的函数返回[]是完全合法的。特别是在上面给出的情况下,如果问题确实是“有多少”,那么[].count等于0,这是正确的,但Optional.None<Thing>?.count会返回Optional<Int>.None };这并不能准确反映成员的数量。

Optional.None等同于Objective-c的nil,但需要进行类型检查。


您可以(也应该)将Optional视为集合的特例!这是一个集合,可以保持零(None)或(Some或只是)一个有问题的东西 - 而不是更多。

因此,对于返回第一个匹配元素的类似方法find,或者没有,Optionals是合适的,因为find只需要返回一个东西而不是更多,或者什么也不返回。