/// 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
那么多?使我发疯。
答案 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)
答案 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行解包会更容易。