Dea*_*ean 120 string optional is-empty swift
有没有一种方法来检查字符串nil和""斯威夫特?在Rails中,我可以blank()用来检查.
我目前有这个,但它似乎有点矫枉过正:
if stringA? != nil {
if !stringA!.isEmpty {
...blah blah
}
}
Run Code Online (Sandbox Code Playgroud)
jrc*_*jrc 196
如果您正在处理可选字符串,则可以:
(string ?? "").isEmpty
Run Code Online (Sandbox Code Playgroud)
如果??nil合并运算符为非nil,则返回左侧,否则返回右侧.
您也可以像这样使用它来返回默认值:
(string ?? "").isEmpty ? "Default" : string!
Run Code Online (Sandbox Code Playgroud)
Rya*_*yan 72
您也许可以使用if-let-where子句:
斯威夫特3:
if let string = string, !string.isEmpty {
/* string is not blank */
}
Run Code Online (Sandbox Code Playgroud)
斯威夫特2:
if let string = string where !string.isEmpty {
/* string is not blank */
}
Run Code Online (Sandbox Code Playgroud)
Sur*_*gch 26
guard声明在我了解这个guard声明之前,我正在使用Swift一段时间.现在我是一个忠实粉丝.它与if语句类似地使用,但它允许提前返回,并且通常可以提供更清晰的代码.
要在检查时使用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)
Run Code Online (Sandbox Code Playgroud)
这将打开可选字符串并检查它是否一次全部为空.如果它是nil(或为空),则立即从函数(或循环)返回,并忽略其后的所有内容.但是如果守护声明通过,那么你可以安全地使用你的解包字符串.
Ken*_* Ko 25
如果您使用的是Swift 2,这是我的同事提出的一个示例,它在可选字符串上添加了isNilOrEmpty属性:
protocol OptionalString {}
extension String: OptionalString {}
extension Optional where Wrapped: OptionalString {
var isNilOrEmpty: Bool {
return ((self as? String) ?? "").isEmpty
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以在可选字符串本身上使用isNilOrEmpty
func testNilOrEmpty() {
let nilString:String? = nil
XCTAssertTrue(nilString.isNilOrEmpty)
let emptyString:String? = ""
XCTAssertTrue(emptyString.isNilOrEmpty)
let someText:String? = "lorem"
XCTAssertFalse(someText.isNilOrEmpty)
}
Run Code Online (Sandbox Code Playgroud)
Sut*_*tra 13
var str: String? = nil
if str?.isEmpty ?? true {
print("str is nil or empty")
}
str = ""
if str?.isEmpty ?? true {
print("str is nil or empty")
}
Run Code Online (Sandbox Code Playgroud)
Ima*_*tit 11
使用Swift 5,您可以使用boolean属性实现类型的Optional扩展,String如果可选字符串没有值或为空,则返回boolean属性:
extension Optional where Wrapped == String {
var isNilOrEmpty: Bool {
return self?.isEmpty ?? true
}
}
Run Code Online (Sandbox Code Playgroud)
但是,通过遵守protocol来String实现isEmpty属性Collection。因此,我们可以将前一个代码的通用约束(Wrapped == String)替换为一个宽泛的约束(),Wrapped: Collection从而使Array,Dictionary同时Set也可以受益于我们的新isNilOrEmpty属性:
extension Optional where Wrapped: Collection {
var isNilOrEmpty: Bool {
return self?.isEmpty ?? true
}
}
Run Code Online (Sandbox Code Playgroud)
与Strings结合使用:
let optionalString: String? = nil
print(optionalString.isNilOrEmpty) // prints: true
Run Code Online (Sandbox Code Playgroud)
let optionalString: String? = ""
print(optionalString.isNilOrEmpty) // prints: true
Run Code Online (Sandbox Code Playgroud)
let optionalString: String? = "Hello"
print(optionalString.isNilOrEmpty) // prints: false
Run Code Online (Sandbox Code Playgroud)
与Arrays结合使用:
let optionalArray: Array<Int>? = nil
print(optionalArray.isNilOrEmpty) // prints: true
Run Code Online (Sandbox Code Playgroud)
let optionalArray: Array<Int>? = []
print(optionalArray.isNilOrEmpty) // prints: true
Run Code Online (Sandbox Code Playgroud)
let optionalArray: Array<Int>? = [10, 22, 3]
print(optionalArray.isNilOrEmpty) // prints: false
Run Code Online (Sandbox Code Playgroud)
资料来源:
我知道这个问题有很多答案,但是它们(在我看来)中似乎没有一个方便验证UITextField数据,这是使用它的最常见情况之一:
extension Optional where Wrapped == String {
var isNilOrEmpty: Bool {
return self?.trimmingCharacters(in: .whitespaces).isEmpty ?? true
}
}
Run Code Online (Sandbox Code Playgroud)
你可以使用
textField.text.isNilOrEmpty
Run Code Online (Sandbox Code Playgroud)
.trimmingCharacters(in:.whitespaces)如果不将空格视为空字符串,或者将其用于更复杂的输入测试,也可以跳过
var isValidInput: Bool {
return !isNilOrEmpty && self!.trimmingCharacters(in: .whitespaces).characters.count >= MIN_CHARS
}
Run Code Online (Sandbox Code Playgroud)
我会推荐.
if stringA.map(isEmpty) == false {
println("blah blah")
}
Run Code Online (Sandbox Code Playgroud)
map如果是可选项,则应用函数参数.Some.
如果让可选的绑定,操场捕获还显示了新Swift 1.2的另一种可能性.

如果你想要将字符串作为非可选字符串访问,你应该使用Ryan的答案,但是如果你只关心字符串的非空虚,我的首选简写是
if stringA?.isEmpty == false {
...blah blah
}
Run Code Online (Sandbox Code Playgroud)
由于==使用可选的布尔值工作正常,我认为这使代码可读而不会模糊原始意图.
如果你想检查相反的结果:如果字符串是nil或者"",我更愿意明确检查这两种情况以显示正确的意图:
if stringA == nil || stringA?.isEmpty == true {
...blah blah
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
89739 次 |
| 最近记录: |