在同一if语句中解包字符串并检查是否为空。

3
我希望您能帮我实现这一目标。
if let large = imageLinks.large {

    if !large.isEmpty {

        result = large
    }
}

在一个if语句中,可以这样写(代码无法编译):
if let large = imageLinks.large where !large.isEmpty {

    result = large       
}

这是可能的吗?

你的代码在我看来应该是可以工作的。你遇到了什么错误? - Christian
@Christian 我已经更新到Swift 1.2,现在它可以工作了。 - emenegro
可能是检查字符串是否为nil和空的重复问题。 - Suragch
3个回答

6

目前还不可能做到。 使用实际版本的Swift,if let语句非常简陋。

但是在Swift 1.2中(它将在Xcode 6.3中提供), 你将能够做到这一点:

(SWIFT 1.2)

if let large = imageLinks.large where !large.isEmpty {

    result = large       
}

但现在你不能这样做。 你可以尝试做以下操作:
if  imageLinks.large != nil && !imageLinks.large!.isEmpty {
   result = large!;
}

注意: Swift 使用“惰性求值”。 如果第一部分imageLinks.large!= nil为假,则不会评估第二部分,因此不会崩溃。
但我认为这种解决方案并不美观(强制展开太多)。

6
在Swift 4.4中,泛型拯救了我们 \o/
public extension Optional where Wrapped == String {
    var isEmptyOrNil: Bool { (self ?? "").isEmpty }
}

使用方法

if nameField.text.isEmptyOrNil {
    //doSomething...
}

1
在Swift 1.1中,如果您不喜欢强制解包,您可以:
if let large = imageLinks.large?.isEmpty == false ? imageLinks.large : nil {
    result = large
}

无论如何,它都不是很美 :(


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接