此SWIFT语句是什么意思?

时间:2018-11-29 06:17:26

标签: ios swift operators

/// Image handler, used when setting up an image using some sort of process.
open var imageHandler: ((UIImageView)->Bool)?
/// The image view.
fileprivate var imageView: UIImageView!
...
let showImage = imageHandler?(imageView) ?? false

此声明是什么意思

let showImage = imageHandler?(imageView) ?? false

那么多?使我发疯。

5 个答案:

答案 0 :(得分:3)

说明:

let showImage = imageHandler?(imageView) ?? false

首先是,imageHandler是一个代码块,声明为采用UIImageView,整个imageHandler可能只是nil

因此,语句中的第一个?

imageHandler?(imageView)

只需简单的可选链接即可。

第二,imageHandler返回一个BOOL。但是imageHandler本身是可选的。因此,在imageHandler本身为nil的情况下,应该在showImage中分配的值是什么。因此,这段代码决定false使用nil-coalescing。

您可以按如下所示使用可选的展开方式

var showImage = false
if let result = imageHandler?(imageView) {
    showImage = result
}

所以我想你拥有了所有想知道的东西。

答案 1 :(得分:2)

如果设置了可选的imageHandler,则对其的调用成功,并且返回的值将被解包并分配给showImage。否则,showImage设置为false。

可选链接: https://docs.swift.org/swift-book/LanguageGuide/OptionalChaining.html

零销售商: https://docs.swift.org/swift-book/LanguageGuide/BasicOperators.html

答案 2 :(得分:2)

enter image description here

“ imageHandler?(imageView)”将返回一些值,并将该值分配给showImage。如果返回nil,则返回false。

答案 3 :(得分:0)

它是一个可选的链接政治家 该语句等于以下内容...

if imageView != nil {
   showImage = true
}
else {
    showImage = false
}

在可选链接中,我们像您的示例一样编写

答案 4 :(得分:0)

我可能会建议imageHandler的默认实现,特别是如果您打算多次使用该函数。像这样的东西更清洁恕我直言:

// Image handler, used when setting up an image using some sort of process.
var imageHandler: ((UIImageView)->Bool) = { _ in return false }

// The image view.
fileprivate var imageView: UIImageView!

// Checking if should show image
let showImage = imageHandler(imageView)

您甚至可以将{ _ in return false }更改为{ _ in false },但是我不确定是否值得在短一点的行上缺乏可读性。

如果您不能将imageHandler设置为可选,则可以按照其他人的建议逐步打开它。但是我不认为您最初的showImage声明很重要。然后阅读4行解包会更容易。