检查Swift中的空字符串?
在目标C中,可以执行以下操作来检查字符串:检查Swift中的空字符串?,swift,Swift,在目标C中,可以执行以下操作来检查字符串: if([myString IsequalString:@”“){ NSLog(@“myString为空!”); }否则{ NSLog(@“myString不是空的,它是:%@”,myString); } 如何在Swift中检测空字符串?现在内置了使用检测空字符串的功能。isEmpty: if emptyString.isEmpty { print("Nothing to see here") } Apple预发布文档:。以下是我检查字符串是
if([myString IsequalString:@”“){
NSLog(@“myString为空!”);
}否则{
NSLog(@“myString不是空的,它是:%@”,myString);
}
如何在Swift中检测空字符串?现在内置了使用
检测空字符串的功能。isEmpty
:
if emptyString.isEmpty {
print("Nothing to see here")
}
Apple预发布文档:。以下是我检查字符串是否为空的方法。“blank”指的是空字符串或仅包含空格/换行符的字符串
struct MyString {
static func blank(text: String) -> Bool {
let trimmed = text.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
return trimmed.isEmpty
}
}
如何使用:
MyString.blank(" ") // true
我正在完全重写我的答案()。这一次是因为我已经成为了和的粉丝。这使得代码更加简洁 非可选字符串 检查长度是否为零
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)
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)
如果If
语句通过,则可以安全地使用该字符串,因为它不是空的。如果它是空的,那么函数将提前返回,并且在它之后什么都不重要
可选字符串
检查长度是否为零或零
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)
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 myString: String? = nil
if (myString ?? "").isEmpty {
print("String is nil or empty")
}
同时进行零检查和长度检查 您可以使用Swift 2.0和iOS 9
if(yourString?.characters.count > 0){}
对于可选字符串,如何:
if let string = string where !string.isEmpty
{
print(string)
}
那怎么办
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")
}
仅检查文本中的空格和换行符
extension String
{
var isBlank:Bool {
return self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).isEmpty
}
}
使用
if text.isBlank
{
//text is blank do smth
}
isEmpty将按照您认为的方式执行,如果string==“”,它将返回true。 其他一些答案指向一种情况,即您有一个可选字符串 请使用 如果字符串不是nil,将使用isEmpty,否则将不使用 下面,将不会设置optionalString,因为该字符串为nil
let optionalString: String? = nil
if optionalString?.isEmpty == true {
optionalString = "Lorem ipsum dolor sit amet"
}
显然,您不会使用上述代码。收益来自JSON解析或其他类似情况,即您是否有值。这保证了如果有值,代码将运行。您也可以使用可选扩展名,这样您就不必担心展开或使用
==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
}
}
}
注意:当在可选上调用此选项时,请确保不要使用?
,否则它仍需要展开。在Xcode 11.3 swift 5.2及更高版本中
使用
范例
let lang = "Swift 5"
if lang.isEmpty {
print("Empty string")
}
如果要忽略空白
if lang.trimmingCharacters(in: .whitespaces).isEmpty {
print("Empty string")
}
我建议在字符串或数组中添加小的扩展名,如下所示
extension Collection {
public var isNotEmpty: Bool {
return !self.isEmpty
}
}
使用它,您可以编写更易于阅读的代码。
比较这两行
if !someObject.someParam.someSubParam.someString.isEmpty {}
及
很容易错过在第一行的开头签名 您可以使用此扩展:
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)
公共分机Swift。可选{
func非空值(回退:T)->T{
如果让stringValue=self as?String,则stringValue.isEmpty{
返回回退
}
如果let值=自身为?T{
返回值
}否则{
返回回退
}
}
}
您还可以使用isEqualToString,如果您使用NSString('var-emptyString:NSString'):emptyString.isEqualToString(“”)初始化var,这会很方便。当用户输入空格时,此条件将失败。更新:此处为isEmpty:并作为扩展。。。作为一个补充,您可能想考虑使用WealSePeaEngEngEngEngStices而不是仅使用空白。谢谢@ FWELELSTA,忽略新行也是非常有用的。这很漂亮,但是如何使用未封装的值呢?强制展开?@halfnibble您可以执行(隐式或强制展开)或:如果让myString=myString where!myString.isEmpty{…}
对此感到很兴奋,但没有成功:(我在Swift 3上。0@teradyl“没用,”你是说你遇到了错误、自动完成问题还是其他问题?除非我不知道发生了什么更改,否则它应该可以工作,但自动完成不会总是选择正确的版本。就像在中一样,当我尝试使用optionalString时,我仍然会遇到编译时错误?它是空白的,需要打开。对我来说,这不是使用currentIncident.priority?.description.isBlank
。说明:可选类型“Bool”的值未展开;您是想使用“!”还是“?”?
。我必须执行(currentIncident.priority?.description??).isBlank
使扩展变得毫无意义。Swift 4.1。@CarstenHagemann这是因为优先级
是可选的。如果只是说明
是可选的,它会起作用,但不能像这样处理可选的父对象(因为如果priority
为零,那么它甚至没有description
属性来首先检查空白)。您的答案与例外答案之间是否存在差异?如果用户只输入一组空格,则此操作无效。在排版中,空格被视为字符,因此它不是空的。如果需要,请将条件更改为“lang.trimmingCharacters(In:.whitespaces).isEmpty'您的目标代码是错误的。它对于nil字符串非常失败。在目标C中,实际使用:if(myString.length){‘its a string with length}。这也适用于nil字符串。这很简单,也很容易阅读。
let isMyStringEmptyOrNil = String.isNilOrEmpty(string: myString)