답변:
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 */
}
fatal error: unexpectedly found nil while unwrapping an Optional value
하지만 상수 string
에는 문자열 데이터가 있습니다.
if let string = string, !string.isEmpty { /* string is not blank */ }
guard let
명령문 아래에서 제어 플로우를 종료하려는 경우 @AmrLotfy 가 대안입니다. 그러나 where 절에서 아무것도 풀리지 않습니다 (!는 부울 부정입니다)
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)
}
where Wrapped:
유형이 아닌 프로토콜을 지정해야 하므로 여기에 선언됩니다 .
isNilOrEmpty
을 hasValue
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 문이 통과하면 래핑되지 않은 문자열을 안전하게 사용할 수 있습니다.
nil
비어 있거나 비어 있으면을 호출하지 않을 것 print(myString)
입니다. 당신이 후 실행을 계속하기 위해 필요한 경우 nil
나 비어 String
, 당신은 사용하는 것 if let
보다는 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
출처 :
isNilOrEmpty
에 isEmptyOrNil
가 자동 완성에 대해 동일한 패턴을 통해 쉽게 검색 가능 그래서 접두사와 일치하는. 나는이 방법으로 찾은 동료들로부터이 확장 기능을 더 많이 채택한 것을 알았습니다.
나는이 질문에 대한 많은 답변이 있다는 것을 알고 있지만 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
}
선택 사항이 아닌 문자열에 액세스하려면 Ryan의 답변을 사용해야 하지만 문자열의 비어 있지 않은 부분 만 신경 쓰면 선호하는 속기입니다.
if stringA?.isEmpty == false {
...blah blah
}
==
선택적 부울에서 잘 작동 하므로 원래 의도를 방해하지 않으면 서 코드를 읽을 수 있다고 생각합니다.
반대로 확인하려면 : 문자열이 nil
또는 ""
인 경우 올바른 의도를 표시하기 위해 두 경우를 명시 적으로 확인하는 것이 좋습니다 .
if stringA == nil || stringA?.isEmpty == true {
...blah blah
}
스위프트 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
}
}
선택적 문자열에서 다음과 같이 사용하십시오.
if myString.isNilOrEmpty { print("Crap, how'd this happen?") }
isEmpty 사용
"Hello".isEmpty // false
"".isEmpty // true
allSatisfy 사용
extension String {
var isBlank: Bool {
return allSatisfy({ $0.isWhitespace })
}
}
"Hello".isBlank // false
"".isBlank // true
선택적 문자열 사용
extension Optional where Wrapped == String {
var isBlank: Bool {
return self?.isBlank ?? true
}
}
var title: String? = nil
title.isBlank // true
title = ""
title.isBlank // true
문자열 클래스 확장을 작성하십시오.
extension String
{ // returns false if passed string is nil or empty
static func isNilOrEmpty(_ string:String?) -> Bool
{ if string == nil { return true }
return string!.isEmpty
}
}// extension: String
문자열에 공백이 하나 이상 있으면 TRUE를 반환합니다. 빈 문자열을 "빈"것으로 취급하려면 다음을 사용하십시오.
return string!.trimmingCharacters(in: CharacterSet.whitespaces).isEmpty
... 대신. 이것은 재단이 필요합니다.
이렇게 사용하십시오 ...
if String.isNilOrEmpty("hello world") == true
{ print("it's a string!")
}
Swift 3 문자열이 실제로 비어 있는지 확인하는 데 효과적입니다. 공백이 있으면 isEmpty가 true를 리턴하기 때문입니다.
extension String {
func isEmptyAndContainsNoWhitespace() -> Bool {
guard self.isEmpty, self.trimmingCharacters(in: .whitespaces).isEmpty
else {
return false
}
return true
}
}
예 :
let myString = "My String"
myString.isEmptyAndContainsNoWhitespace() // returns false
let myString = ""
myString.isEmptyAndContainsNoWhitespace() // returns true
let myString = " "
myString.isEmptyAndContainsNoWhitespace() // returns false
로컬 DB에서 서버로 또는 그 반대로 값을 전달할 때?와!에 너무 많은 문제가있었습니다.
그래서 null 사례를 처리하기 위해 Swift3.0 유틸리티를 만들었으며 코드에서?와!를 거의 완전히 피할 수 있습니다.
func str(_ string: String?) -> String {
return (string != nil ? string! : "")
}
전의:-
전 :
let myDictionary: [String: String] =
["title": (dbObject?.title != nil ? dbObject?.title! : "")]
후 :
let myDictionary: [String: String] =
["title": str(dbObject.title)]
유효한 문자열을 확인해야 할 때
if !str(dbObject.title).isEmpty {
//do stuff
}
이것은 합리적으로 이해되는 코드를 작성한 후에 수많은?와!를 추가하고 제거하는 문제를 해결해야했습니다.
삼항 연산자 (조건부 연산자라고도 함 C++ forever!
)를 사용하십시오.
if stringA != nil ? stringA!.isEmpty == false : false { /* ... */ }
stringA!
힘 랩핑 해제는 경우에만 일어나는 stringA != nil
것이 안전하므로. == false
상세는 또 다른 느낌표에 비해 다소 읽을 수!(stringA!.isEmpty)
.
개인적으로 약간 다른 형태를 선호합니다.
if stringA == nil ? false : stringA!.isEmpty == false { /* ... */ }
위의 문장 if
에서 변수가 일 때 전체 블록이 실행되지 않는다는 것은 즉시 매우 분명합니다 nil
.
UITextField 에서 값을 가져오고 nil
& empty
문자열을 확인할 때 도움이됩니다.
@IBOutlet weak var myTextField: UITextField!
button
UITextField에서 문자열을 가져오고 다른 작업 을 수행하는 함수 (을 탭 할 때 )가 있습니다.
@IBAction func getStringFrom_myTextField(_ sender: Any) {
guard let string = myTextField.text, !(myTextField.text?.isEmpty)! else { return }
//use "string" to do your stuff.
}
이것은 nil
가치뿐만 아니라 돌볼 것입니다empty
문자열 합니다.
그것은 나를 위해 완벽하게 잘 작동했습니다.
내 의견으로는, 빈 문자열을 확인하는 가장 좋은 방법은 문자열 카운트를 취하는 것입니다.
var nilString : String?
print(nilString.count) // count is nil
var emptyString = ""
print(emptyString.count) // count is 0
// combine both conditions for optional string variable
if string?.count == nil || string?.count == 0 {
print("Your string is either empty or nil")
}
이 기능을 사용할 수 있습니다
class func stringIsNilOrEmpty(aString: String) -> Bool { return (aString).isEmpty }
nil
이 함수에 전혀 전달할 수 없기 때문에 예외가 발생하지 않습니다 (objc 제외).이 경우 실제로 충돌이 발생합니다.