[swift] nil & empty의 문자열 확인

에 대한 문자열을 확인 할 수있는 방법이 있나요 nil""스위프트의는? Rails에서는 blank()확인할 수 있습니다 .

나는 현재 이것을 가지고 있지만 과잉 것 같습니다 :

    if stringA? != nil {
        if !stringA!.isEmpty {
            ...blah blah
        }
    }



답변

선택적 문자열을 다루는 경우 다음과 같이 작동합니다.

(string ?? "").isEmpty

??는 비 전무의 경우 전무 병합 연산자 그렇지 않으면 오른쪽을 반환 왼쪽을 반환합니다.

다음과 같이 사용하여 기본값을 반환 할 수도 있습니다.

(string ?? "").isEmpty ? "Default" : string!


답변

if-let-where 절을 사용할 수 있습니다.

스위프트 3 :

if let string = string, !string.isEmpty {
    /* string is not blank */
}

스위프트 2 :

if let string = string where !string.isEmpty {
    /* string is not blank */
}


답변

Swift 2를 사용하는 경우 다음은 내 동료가 제시 한 예제이며 선택적 문자열에 isNilOrEmpty 속성을 추가합니다.

protocol OptionalString {}
extension String: OptionalString {}

extension Optional where Wrapped: OptionalString {
    var isNilOrEmpty: Bool {
        return ((self as? String) ?? "").isEmpty
    }
}

그런 다음 선택적 문자열 자체에서 isNilOrEmpty를 사용할 수 있습니다

func testNilOrEmpty() {
    let nilString:String? = nil
    XCTAssertTrue(nilString.isNilOrEmpty)

    let emptyString:String? = ""
    XCTAssertTrue(emptyString.isNilOrEmpty)

    let someText:String? = "lorem"
    XCTAssertFalse(someText.isNilOrEmpty)
}


답변

guard진술 사용

나는 guard진술 에 대해 배우기 전에 잠시 동안 Swift를 사용하고있었습니다 . 지금 나는 큰 팬입니다. if명령문 과 유사하게 사용 되지만 조기 리턴을 허용 하고 일반적으로 훨씬 깨끗한 코드를 만듭니다.

문자열이 0이 아니거나 비어 있지 않은지 확인할 때 guard를 사용하려면 다음을 수행하십시오.

let myOptionalString: String? = nil

guard let myString = myOptionalString, !myString.isEmpty else {
    print("String is nil or empty.")
    return // or break, continue, throw
}

/// myString is neither nil nor empty (if this point is reached)
print(myString)

옵션 문자열을 풀고 한 번에 비어 있지 않은지 확인합니다. 그것이 0이거나 비어 있다면, 즉시 함수 (또는 루프)에서 돌아오고 그 이후의 모든 것이 무시됩니다. 그러나 guard 문이 통과하면 래핑되지 않은 문자열을 안전하게 사용할 수 있습니다.

또한보십시오


답변

Swift 5를 사용하면 선택적 문자열에 값이 없거나 비어있는 경우를 반환하는 부울 속성을 사용하여 유형에 대한 Optional확장을 구현할 수 있습니다 String.

extension Optional where Wrapped == String {

    var isNilOrEmpty: Bool {
        return self?.isEmpty ?? true
    }

}

그러나 protocol을 준수하여 속성을 String구현 isEmpty합니다 Collection. 그러므로 우리는 이전 코드의 일반적인 제약 (대체 할 수있는 Wrapped == String폭 넓은 하나 (과) Wrapped: Collection) 그래서 Array, Dictionary그리고 Set또한 우리의 새로운 혜택 isNilOrEmpty속성을 :

extension Optional where Wrapped: Collection {

    var isNilOrEmpty: Bool {
        return self?.isEmpty ?? true
    }

}

Strings를 사용한 사용법 :

let optionalString: String? = nil
print(optionalString.isNilOrEmpty) // prints: true
let optionalString: String? = ""
print(optionalString.isNilOrEmpty) // prints: true
let optionalString: String? = "Hello"
print(optionalString.isNilOrEmpty) // prints: false

Arrays를 사용한 사용법 :

let optionalArray: Array<Int>? = nil
print(optionalArray.isNilOrEmpty) // prints: true
let optionalArray: Array<Int>? = []
print(optionalArray.isNilOrEmpty) // prints: true
let optionalArray: Array<Int>? = [10, 22, 3]
print(optionalArray.isNilOrEmpty) // prints: false

출처 :


답변

var str: String? = nil

if str?.isEmpty ?? true {
    print("str is nil or empty")
}

str = ""

if str?.isEmpty ?? true {
    print("str is nil or empty")
}


답변

나는이 질문에 대한 많은 답변이 있다는 것을 알고 있지만 UITextField, 데이터 를 확인하는 데 (이것은 내 의견으로는) 편리한 것 같지 않습니다.이를 사용하는 가장 일반적인 경우 중 하나입니다.

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

당신은 그냥 사용할 수 있습니다

textField.text.isNilOrEmpty

또한를 건너 뛸 수 있습니다 .trimmingCharacters(in:.whitespaces)당신은 빈 문자열로 공백을 고려하거나 같은 더 복잡한 입력 테스트를 위해 그것을 사용하지 않는 경우

var isValidInput: Bool {
    return !isNilOrEmpty && self!.trimmingCharacters(in: .whitespaces).characters.count >= MIN_CHARS
}