[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
}
}
String
s를 사용한 사용법 :
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
Array
s를 사용한 사용법 :
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
}