Swift에서 빈 문자열을 확인 하시겠습니까?


165

목표 C에서 문자열을 확인하기 위해 다음을 수행 할 수 있습니다.

if ([myString isEqualToString:@""]) {
    NSLog(@"myString IS empty!");
} else {
    NSLog(@"myString IS NOT empty, it is: %@", myString);
}

Swift에서 빈 문자열을 어떻게 감지합니까?


3
목표 코드가 잘못되었습니다. nil 문자열에 대해서는 잘못 실패합니다. 객관적 C에서 실제로는 다음을 사용합니다. if (myString.length) { 'its length with string}. 이것은 nil 문자열에서도 작동합니다. 간단하고 읽기 쉽습니다.
Tom Andersen

답변:


241

이제 빈 문자열을 감지하는 내장 기능이 있습니다 .isEmpty.

if emptyString.isEmpty {
    print("Nothing to see here")
}

Apple 시험판 문서 : "문자열 및 문자" .


1
NSString으로 var를 초기화하는 경우 isEqualToString을 사용할 수도 있습니다 ( 'var emptyString : NSString') : emptyString.isEqualToString ( "")
Sven

1
사용자가 공백을 입력하면이 조건이 실패합니다.
Shanu Singh

업데이트 : 여기 isEmpty가 있습니다 : developer.apple.com/documentation/swift/string/2946268-isempty
chrisjlee

108

문자열이 nil인지 비어 있는지 확인하는 간결한 방법은 다음과 같습니다.

var myString: String? = nil

if (myString ?? "").isEmpty {
    print("String is nil or empty")
}

이것은 아름답지만 래핑되지 않은 값을 어떻게 사용 하시겠습니까? 랩 해제?
Nostalg.io

5
@halfnibble (암시 적 또는 강제 언랩) 또는 다음을 수행 할 수 있습니다.if let myString = myString where !myString.isEmpty { ... }
Albert Bori

52

나는 내 답변을 완전히 다시 작성하고 있습니다 ( 다시 ). 이번에는 guard성명서 의 팬이 되었고 일찍 돌아 왔기 때문 입니다. 훨씬 깨끗한 코드를 만듭니다.

비 선택적 문자열

길이가 0인지 확인하십시오.

let myString: String = ""

if myString.isEmpty {
    print("String is empty.")
    return // or break, continue, throw
}

// myString is not empty (if this point is reached)
print(myString)

만약 if 문을 통과, 당신은 안전하게이 비어 있지 않은 것을 알고 문자열을 사용할 수 있습니다. 비어 있으면 함수가 일찍 반환되고 중요한 후에 아무것도 반환되지 않습니다.

선택적 문자열

길이가 없거나 0인지 확인하십시오.

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)

이것은 선택 사항을 풀고 동시에 비어 있지 않은지 확인합니다. guard명령문을 전달한 후 랩핑되지 않은 비어 있지 않은 문자열을 안전하게 사용할 수 있습니다.


40

Xcode 11.3 swift 5.2 이상

사용하다

var isEmpty: Bool { get } 

let lang = "Swift 5"

if lang.isEmpty {
   print("Empty string")
}

공백무시 하려면

if lang.trimmingCharacters(in: .whitespaces).isEmpty {
   print("Empty string")
}

2
답변과 예외 답변 사이에 차이가 있습니까?
Ahmad F

사용자가 많은 공간을 입력하면 작동하지 않습니다.
Supertecnoboff

2
타이포그래피에서 공백은 문자로 간주되므로 공백이 아닙니다. 원하는 경우 조건을 'lang.trimmingCharacters (in : .whitespaces) .isEmpty'로 변경
Saranjith

28

문자열이 비어 있는지 확인하는 방법은 다음과 같습니다. '공백'은 비어 있거나 공백 / 줄 바꾸기 문자 만 포함하는 문자열을 의미합니다.

struct MyString {
  static func blank(text: String) -> Bool {
    let trimmed = text.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
    return trimmed.isEmpty
  }
}

사용하는 방법:

MyString.blank(" ") // true


2
부록으로 공백 대신 공백 및 새 줄 문자 집합 사용을 고려할 수 있습니다.
fwielstra

1
@fwielstra 덕분에 새로운 줄을 무시하는 것도 매우 유용합니다.
Evgenii

14

선택적 확장을 사용하여 언 래핑 또는 사용에 대해 걱정할 필요가 없습니다 == true.

extension String {
    var isBlank: Bool {
        return self.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty
    }
}
extension Optional where Wrapped == String {
    var isBlank: Bool {
        if let unwrapped = self {
            return unwrapped.isBlank
        } else {
            return true
        }
    }
}

참고 : 옵션으로 이것을 호출 할 때 사용하지 마십시오. ?그렇지 않으면 래핑 해제가 필요합니다.


1
있어 이것에 대해 흥분하지만, 작업 :( 내가 3.0 스위프트에있어하지 않았다
teradyl

@teradyl "작동하지 않았다"는 오류, 자동 완성 문제 또는 기타 문제가 발생했음을 의미합니까? 내가 모르는 것이 변경되지 않는 한 작동하지만 자동 완성이 항상 올바른 버전을 선택하지는 않습니다.
John Montgomery

에서와 같이 여전히 풀어야 할 때 컴파일 타임 오류가 발생 optionalString?isBlank합니다.
teradyl

1
나를 위해 이것은 작동하지 않습니다 currentIncident.priority?.description.isBlank. 말한다 : Value of optional type 'Bool?' not unwrapped; did you mean to use '!' or '?'?. (currentIncident.priority?.description ?? "").isBlank확장 기능을 무의미하게 만드는 작업을 수행해야합니다 . 스위프트 4.1.
Carsten Hagemann

1
@CarstenHagemann priority옵션이 있기 때문 입니다. 다만 경우에 description선택했다 그것을 작동합니다,하지만 당신은 부모 개체 (경우 때문에 그런 선택되는 해결할 수없는 priority무기 호입니다, 그것은 심지어이없는 description처음에 빈 다움를 확인하기 위해 속성).
존 몽고메리

9

부정 검사 및 길이를 동시에 수행하려면 Swift 2.0 및 iOS 9부터 사용할 수 있습니다.

if(yourString?.characters.count > 0){}

4

isEmpty는 생각대로 문자열 == ""이면 true를 반환합니다. 다른 답변 중 일부는 선택적 문자열이있는 상황을 나타냅니다.

옵션 체인을 사용하십시오 !!!!

문자열이 nil이 아닌 경우 isEmpty가 사용되며 그렇지 않으면 그렇지 않습니다.

아래에서 문자열이 nil이므로 optionalString이 설정되지 않습니다.

let optionalString: String? = nil
if optionalString?.isEmpty == true {
     optionalString = "Lorem ipsum dolor sit amet"
}

분명히 위의 코드를 사용하지 않을 것입니다. 이점은 JSON 구문 분석 또는 값이 있거나없는 다른 상황에서 비롯됩니다. 이렇게하면 값이있는 경우 코드가 실행됩니다.


2

텍스트에서 공백과 개행 문자 만 확인하십시오.

extension String
{
    var  isBlank:Bool {
        return self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).isEmpty
    }
}

사용

if text.isBlank
{
  //text is blank do smth
}

1

선택적 문자열의 경우

if let string = string where !string.isEmpty
{
    print(string)
}


0

이건 어떤가요

if let notEmptyString = optionalString where !notEmptyString.isEmpty {
    // do something with emptyString 
    NSLog("Non-empty string is %@", notEmptyString)
} else {
    // empty or nil string
    NSLog("Empty or nil string")
}

0

다음과 같이 String 또는 Array에 작은 확장명을 추가하는 것이 좋습니다.

extension Collection {
    public var isNotEmpty: Bool {
        return !self.isEmpty
    }
}

그것으로 당신은 읽기 쉬운 코드를 작성할 수 있습니다. 이 두 줄을 비교

if !someObject.someParam.someSubParam.someString.isEmpty {}

if someObject.someParam.someSubParam.someString.isNotEmpty {}

놓치기 쉽다 ! 주먹 줄의 시작 부분에 서명하십시오.


0

이 확장명을 사용할 수 있습니다 :

extension String {

    static func isNilOrEmpty(string: String?) -> Bool {
        guard let value = string else { return true }

        return value.trimmingCharacters(in: .whitespaces).isEmpty
    }

}

다음과 같이 사용하십시오.

let isMyStringEmptyOrNil = String.isNilOrEmpty(string: myString)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.