我想扩展Optional
类以返回一个布尔值,该布尔值指示self
是nil
还是false
。我该怎么做?
我已经有了一个可选扩展名,以检查它是否为空或nil
,如下所示:
extension Optional where Wrapped: Collection {
var isNilOrEmpty: Bool {
return self?.isEmpty ?? true
}
}
因此必须遵循这些原则,但我无法弄清楚。
答案 0 :(得分:0)
如有疑问,请使用class listAdapter(val food : ArrayList<Foods>) : RecyclerView.Adapter<listAdapter.ViewHolder>() {
override fun getItemCount(): Int {
return food.count()
Log.d("getFood", food.size.toString())
}
}
打开包装:
guard
可以缩写为:
extension Optional where Wrapped == Bool {
var isNilOrFalse: Bool {
guard let wrapped = self else { return true }
return !wrapped
}
}
但是,我会警告您不要使用此类扩展名。它们不会使您的代码更具可读性。
答案 1 :(得分:0)
import Foundation
extension Optional where Wrapped == String {
var isNotBlank: Bool {
if let a = self, a.isNotEmpty {
return true
} else {
return false
}
}
var isBlank: Bool {
return !isNotBlank
}
}
extension Optional {
var isNil: Bool {
return self == nil
}
var isNotNil: Bool {
return self != nil
}
func ifLet(_ action: (Wrapped)-> Void) {
if self != nil {
action(self.unsafelyUnwrapped)
}
else { return }
}
func ifNil (_ action: ()-> Void) {
if self == nil { action() }
else { return }
}
func ifElse(_ notNil: ()-> Void, _ isNil: ()-> Void) {
if self != nil { notNil() }
else { isNil() }
}
func or<T>(_ opt: T) -> T {
if self == nil { return opt }
else { return self as! T }
}
mutating func orChange<T>(_ opt: T) {
if self == nil { self = opt as? Wrapped }
}
}
答案 2 :(得分:0)
您不需要做任何新的事情。您可以在可选的Bool上使用!= true
:
var aBool: Bool? = nil
if aBool != true {
print("aBool is nil or false")
}
那是合法的并且有效。之所以有效,是因为nil不等于true。