我在模型类中有一些查找方法。当数据为空时返回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()
答案 0 :(得分:1)
Optional
是增强现有类型以表达“没有”这一概念的好方法。
集合,数组和树已经的集合具有该功能 - 空集合。
从返回集合类型的函数返回[]
是完全合法的。特别是在上面给出的情况下,如果问题确实是“有多少”,那么[].count
等于0
,这是正确的,但Optional.None<Thing>?.count
会返回Optional<Int>.None
};这并不能准确反映成员的数量。
Optional.None
等同于Objective-c的nil
,但需要进行类型检查。
您可以(也应该)将Optional
视为集合的特例!这是一个集合,可以保持零(None
)或(Some
或只是)一个有问题的东西 - 而不是更多。
因此,对于返回第一个匹配元素的类似方法find
,或者没有,Optionals是合适的,因为find
只需要返回一个东西而不是更多,或者什么也不返回。