Check string for nil & empty

后端 未结 23 1236
感动是毒
感动是毒 2020-12-07 10:53

Is there a way to check strings for nil and \"\" in Swift? In Rails, I can use blank() to check.

I currently have this, but i

相关标签:
23条回答
  • 2020-12-07 11:17

    SWIFT 3

    extension Optional where Wrapped == String {
    
        /// Checks to see whether the optional string is nil or empty ("")
        public var isNilOrEmpty: Bool {
            if let text = self, !text.isEmpty { return false }
            return true
        }
    }
    

    Use like this on optional string:

    if myString.isNilOrEmpty { print("Crap, how'd this happen?") } 
    
    0 讨论(0)
  • 2020-12-07 11:20

    I would recommend.

    if stringA.map(isEmpty) == false {
        println("blah blah")
    }
    

    map applies the function argument if the optional is .Some.
    The playground capture also shows another possibility with the new Swift 1.2 if let optional binding.

    enter image description here

    0 讨论(0)
  • 2020-12-07 11:21

    I know there are a lot of answers to this question, but none of them seems to be as convenient as this (in my opinion) to validate UITextField data, which is one of the most common cases for using it:

    extension Optional where Wrapped == String {
        var isNilOrEmpty: Bool {
            return self?.trimmingCharacters(in: .whitespaces).isEmpty ?? true
        }
    }
    

    You can just use

    textField.text.isNilOrEmpty
    

    You can also skip the .trimmingCharacters(in:.whitespaces) if you don't consider whitespaces as an empty string or use it for more complex input tests like

    var isValidInput: Bool {
        return !isNilOrEmpty && self!.trimmingCharacters(in: .whitespaces).characters.count >= MIN_CHARS
    }
    
    0 讨论(0)
  • 2020-12-07 11:23

    This is a general solution for all types that conform to the Collection protocol, which includes String:

    extension Optional where Wrapped: Collection {
        var isNilOrEmpty: Bool {
            self?.isEmpty ?? true
        }
    }
    
    0 讨论(0)
  • 2020-12-07 11:24

    When dealing with passing values from local db to server and vice versa, I was having too much trouble with ?'s and !'s and what not.

    So I made a Swift3.0 utility to handle null cases and i can almost totally avoid ?'s and !'s in the code.

    func str(_ string: String?) -> String {
        return (string != nil ? string! : "")
    }
    

    Ex:-

    Before :

        let myDictionary: [String: String] = 
                          ["title": (dbObject?.title != nil ? dbObject?.title! : "")]
    

    After :

        let myDictionary: [String: String] = 
                            ["title": str(dbObject.title)]
    

    and when its required to check for a valid string,

        if !str(dbObject.title).isEmpty {
            //do stuff
        }
    

    This saved me having to go through the trouble of adding and removing numerous ?'s and !'s after writing code that reasonably make sense.

    0 讨论(0)
  • 2020-12-07 11:26

    Use the ternary operator (also known as the conditional operator, C++ forever!):

    if stringA != nil ? stringA!.isEmpty == false : false { /* ... */ }

    The stringA! force-unwrapping happens only when stringA != nil, so it is safe. The == false verbosity is somewhat more readable than yet another exclamation mark in !(stringA!.isEmpty).

    I personally prefer a slightly different form:

    if stringA == nil ? false : stringA!.isEmpty == false { /* ... */ }

    In the statement above, it is immediately very clear that the entire if block does not execute when a variable is nil.

    0 讨论(0)
提交回复
热议问题