В Objective C можно сделать следующее, чтобы проверить строки:
if ([myString isEqualToString:@""]) {
NSLog(@"myString IS empty!");
} else {
NSLog(@"myString IS NOT empty, it is: %@", myString);
}
Как обнаружить пустые строки в Swift?
В Objective 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бы он был просто необязательным, он бы работал, но вы не можете обойти родительский объект, являющийся необязательным, как этот (потому что если prioritynil, то у него даже нет descriptionсвойства для проверки на пустоту в первую очередь).
isEmpty сделает так, как вы думаете, если string == "", он вернет true. Некоторые из других ответов указывают на ситуацию, когда у вас есть необязательная строка.
ПОЖАЛУЙСТА, используйте дополнительные цепи !!!!
Если строка не равна nil, будет использоваться isEmpty, иначе - нет.
Ниже optionString НЕ будет установлен, потому что строка имеет значение nil
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)