Swift: 可选的编码规则。 swift 返回 nil 或 [] 的样式
Swift: Coding rule of optional. Which is swift's style returning nil or []
我在模型 classes 中有一些查找方法。当数据为空时,返回 nil 或 [](empty array) 哪个更好。请看下面。我认为 (2) 更好,因为我不需要 nil 检查。
(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()
更新
我更改了模型 class 的方法。
(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()
Optional
是增强现有类型以表达 "there isn't one".
的好方法
集合、数组和树等集合已经具有这种能力——空集合。
return []
从 return 集合类型的函数是完全合法的。特别是在你上面给出的情况下,因为如果问题真的是 'how many are there',那么 [].count
等于 0
,这是正确的,但是 Optional.None<Thing>?.count
会 return Optional<Int>.None
;这并不能准确代表成员数量。
Optional.None
等同于 Objective-c 的 nil
但有类型检查。
您也可以(并且应该)将 Optional
视为集合的特例!它是一个集合,可以包含零 (None
) 或 (Some
或只是) 所讨论的事物之一 - 仅此而已。
所以对于 find
的类似方法 return 是第一个匹配元素,或者 none,Optionals 是合适的,因为 find
只需要 return 一件事,仅此而已,或者什么都没有。
我在模型 classes 中有一些查找方法。当数据为空时,返回 nil 或 [](empty array) 哪个更好。请看下面。我认为 (2) 更好,因为我不需要 nil 检查。
(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()
更新
我更改了模型 class 的方法。
(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()
Optional
是增强现有类型以表达 "there isn't one".
集合、数组和树等集合已经具有这种能力——空集合。
return []
从 return 集合类型的函数是完全合法的。特别是在你上面给出的情况下,因为如果问题真的是 'how many are there',那么 [].count
等于 0
,这是正确的,但是 Optional.None<Thing>?.count
会 return Optional<Int>.None
;这并不能准确代表成员数量。
Optional.None
等同于 Objective-c 的 nil
但有类型检查。
您也可以(并且应该)将 Optional
视为集合的特例!它是一个集合,可以包含零 (None
) 或 (Some
或只是) 所讨论的事物之一 - 仅此而已。
所以对于 find
的类似方法 return 是第一个匹配元素,或者 none,Optionals 是合适的,因为 find
只需要 return 一件事,仅此而已,或者什么都没有。