Amaç C'de, dizeleri kontrol etmek için aşağıdakiler yapılabilir:
if ([myString isEqualToString:@""]) {
NSLog(@"myString IS empty!");
} else {
NSLog(@"myString IS NOT empty, it is: %@", myString);
}
Swift'teki boş dizeleri nasıl algılar?
Amaç C'de, dizeleri kontrol etmek için aşağıdakiler yapılabilir:
if ([myString isEqualToString:@""]) {
NSLog(@"myString IS empty!");
} else {
NSLog(@"myString IS NOT empty, it is: %@", myString);
}
Swift'teki boş dizeleri nasıl algılar?
Yanıtlar:
Artık boş dizeyi aşağıdakilerle algılama yeteneği vardır .isEmpty
:
if emptyString.isEmpty {
print("Nothing to see here")
}
Apple Sürüm öncesi belgeler: "Dizeler ve Karakterler" .
Dizenin sıfır veya boş olup olmadığını kontrol etmenin kısa bir yolu:
var myString: String? = nil
if (myString ?? "").isEmpty {
print("String is nil or empty")
}
if let myString = myString where !myString.isEmpty { ... }
Cevabımı tamamen yeniden yazıyorum ( tekrar ). Bu kez çünkü guard
açıklama ve erken dönüş hayranı oldum . Çok daha temiz bir kod sağlar.
Sıfır uzunluğunu kontrol edin.
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)
Eğer if
deyimi geçer, o zaman güvenli bir şekilde onu boş olmadığını bilerek dizesi kullanabilirsiniz. Boşsa, işlev erken dönecektir ve önemli olduktan sonra hiçbir şey olmayacaktır.
Sıfır veya sıfır uzunluk için kontrol edin.
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)
Bu, isteğe bağlı paketi açar ve aynı anda boş olup olmadığını kontrol eder. İfadeyi geçtikten sonra guard
, paketlenmemiş boş olmayan dizenizi güvenle kullanabilirsiniz.
kullanım
var isEmpty: Bool { get }
Misal
let lang = "Swift 5"
if lang.isEmpty {
print("Empty string")
}
Beyaz boşlukları yok saymak istiyorsanız
if lang.trimmingCharacters(in: .whitespaces).isEmpty {
print("Empty string")
}
Dize boş olup olmadığını nasıl kontrol ederim. 'Blank' ile boş ya da yalnızca boşluk / satırsonu karakterleri içeren bir dize kastediyorum.
struct MyString {
static func blank(text: String) -> Bool {
let trimmed = text.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
return trimmed.isEmpty
}
}
Nasıl kullanılır:
MyString.blank(" ") // true
İsteğe bağlı bir uzantı da kullanabilirsiniz, böylece paketin açılması veya kullanılması konusunda endişelenmenize gerek kalmaz == 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
}
}
}
Not: Bunu isteğe bağlı olarak çağırırken, kullanmamaya dikkat ?
edin, aksi takdirde yine de paketin açılması gerekir.
optionalString?isBlank
İçinde olduğu gibi hala açılmaması gereken kullanmaya çalıştığımda derleme zamanı hatası alıyorum .
currentIncident.priority?.description.isBlank
. Diyor: Value of optional type 'Bool?' not unwrapped; did you mean to use '!' or '?'?
. Yapmam gereken (currentIncident.priority?.description ?? "").isBlank
uzantıları sorta anlamsız kılıyor. Hızlı 4.1.
priority
orada isteğe bağlıdır. Sadece description
isteğe bağlı olsaydı, işe yarayacaktı, ancak böyle bir isteğe bağlı bir üst nesnenin etrafında çalışamazsınız (çünkü priority
nil description
ise, ilk etapta boşluğu kontrol etmek için bir özelliğe bile sahip değildir ).
isEmpty düşündüğünüz gibi yapacak, eğer string == "" ise true değerini döndürecektir. Diğer yanıtlardan bazıları isteğe bağlı bir dizenin olduğu bir duruma işaret eder.
LÜTFEN İsteğe Bağlı Zincirleme kullanın !!!!
Dize nil değilse, isEmpty kullanılır, aksi takdirde kullanılmaz.
Aşağıda, string nil olduğu için OptionalString ayarlanmayacak
let optionalString: String? = nil
if optionalString?.isEmpty == true {
optionalString = "Lorem ipsum dolor sit amet"
}
Açıkçası yukarıdaki kodu kullanmazsınız. Kazançlar, JSON ayrıştırma işleminden veya bir değerin olduğu veya bulunmadığı diğer durumlardan gelir. Bu bir değer varsa kodun çalıştırılacağını garanti eder.
Ne dersin
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")
}
Dize veya Diziye benzeyen küçük bir uzantı eklemenizi tavsiye ederim
extension Collection {
public var isNotEmpty: Bool {
return !self.isEmpty
}
}
Bununla birlikte, okunması daha kolay bir kod yazabilirsiniz. Bu iki satırı karşılaştır
if !someObject.someParam.someSubParam.someString.isEmpty {}
ve
if someObject.someParam.someSubParam.someString.isNotEmpty {}
Kaçırmak kolaydır ! işareti yumruk işareti başında.
Bu uzantıyı kullanabilirsiniz:
extension String {
static func isNilOrEmpty(string: String?) -> Bool {
guard let value = string else { return true }
return value.trimmingCharacters(in: .whitespaces).isEmpty
}
}
ve sonra şu şekilde kullanın:
let isMyStringEmptyOrNil = String.isNilOrEmpty(string: myString)