扩展Optional检查它是否为nil或false

时间:2018-12-17 14:02:17

标签: swift

我想扩展Optional类以返回一个布尔值,该布尔值指示selfnil还是false。我该怎么做?

我已经有了一个可选扩展名,以检查它是否为空或nil,如下所示:

extension Optional where Wrapped: Collection {
    var isNilOrEmpty: Bool {
        return self?.isEmpty ?? true
    }
}

因此必须遵循这些原则,但我无法弄清楚。

3 个答案:

答案 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。