У цілі C можна зробити наступне, щоб перевірити наявність рядків:
if ([myString isEqualToString:@""]) {
NSLog(@"myString IS empty!");
} else {
NSLog(@"myString IS NOT empty, it is: %@", myString);
}
Як можна виявити порожні рядки в Swift?
У цілі C можна зробити наступне, щоб перевірити наявність рядків:
if ([myString isEqualToString:@""]) {
NSLog(@"myString IS empty!");
} else {
NSLog(@"myString IS NOT empty, it is: %@", myString);
}
Як можна виявити порожні рядки в Swift?
Відповіді:
Зараз існує вбудована здатність виявляти порожній рядок за допомогою .isEmpty:
if emptyString.isEmpty {
print("Nothing to see here")
}
Документація до випуску Apple: "Рядки та символи" .
Короткий спосіб перевірити, чи є рядок нульовим чи порожнім:
var myString: String? = nil
if (myString ?? "").isEmpty {
print("String is nil or empty")
}
if let myString = myString where !myString.isEmpty { ... }
Я повністю переписую свою відповідь ( знову ). Цього разу це тому, що я став прихильником guardзаяви і раннього повернення . Це робить набагато чистішим код.
Перевірте нульову довжину.
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оператор проходить, то ви можете сміливо використовувати рядок, знаючи, що він не порожній. Якщо вона порожня, функція повернеться рано і нічого не має після цього.
Перевірте наявність нульової або нульової довжини.
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заяви ви можете сміливо користуватися вашим розгорнутим непустим рядком.
Використовуйте
var isEmpty: Bool { get }
Приклад
let lang = "Swift 5"
if lang.isEmpty {
print("Empty string")
}
Якщо ви хочете ігнорувати пробіли
if lang.trimmingCharacters(in: .whitespaces).isEmpty {
print("Empty string")
}
Ось як я перевіряю, чи рядок порожнім. Під «порожнім» я маю на увазі рядок, який або порожній, або містить лише пробіли / символи нового рядка.
struct MyString {
static func blank(text: String) -> Bool {
let trimmed = text.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
return trimmed.isEmpty
}
}
Як використовувати:
MyString.blank(" ") // true
Ви також можете скористатись додатковим розширенням, щоб не потрібно було турбуватися про розгортання чи використання == 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
}
}
}
Примітка. Якщо дзвонити це на необов'язково, переконайтеся, що його не використовують, ?інакше все-таки буде потрібно розгортання.
optionalString?isBlankщо її потрібно розгортати.
currentIncident.priority?.description.isBlank. Каже: Value of optional type 'Bool?' not unwrapped; did you mean to use '!' or '?'?. Я маю робити, (currentIncident.priority?.description ?? "").isBlankщо робить розширення сорту безглуздим. Швидкий 4.1.
priority, що там необов'язково. Якби просто descriptionбуло необов’язково, воно працювало б, але ви не можете обійти батьківський об'єкт, який є таким, як необов'язковий (тому що, якщо priorityнуль, то він навіть не має descriptionвластивості перевіряти порожнечу).
isEmpty зробить так, як ви думаєте, що буде, якщо рядок == "", він поверне справжнє значення. Деякі з інших відповідей вказують на ситуацію, коли у вас є необов'язковий рядок.
ВИМОГАЙТЕ використання додаткового ланцюга !!!!
Якщо рядок не дорівнює нулю, буде використано isEmpty, інакше не буде.
Нижче, optionalString НЕ буде встановлений, оскільки рядок дорівнює нулю
let optionalString: String? = nil
if optionalString?.isEmpty == true {
optionalString = "Lorem ipsum dolor sit amet"
}
Очевидно, ви б не використовували наведений вище код. Виграш приходить від розбору JSON або інших подібних ситуацій, коли ти маєш цінність чи ні. Цей код гарантій буде запущений, якщо є значення.
А як на рахунок
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")
}
Я можу рекомендувати додати невелике розширення до String або Array, що виглядає так
extension Collection {
public var isNotEmpty: Bool {
return !self.isEmpty
}
}
З його допомогою ви можете написати код, який легше читати. Порівняйте ці два рядки
if !someObject.someParam.someSubParam.someString.isEmpty {}
і
if someObject.someParam.someSubParam.someString.isNotEmpty {}
Це легко пропустити ! підписати на початку рядка кулак.
Ви можете використовувати це розширення:
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)