Что значит в этом заявлении SWIFT? - PullRequest
0 голосов
/ 29 ноября 2018
/// 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 голосов
/ 29 ноября 2018

Я мог бы предложить реализацию по умолчанию для 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 строки разворачивания.

0 голосов
/ 29 ноября 2018

enter image description here

«imageHandler? (ImageView)» вернет некоторое значение, и это значение будет присвоено showImage.Если он вернет nil, тогда false получит присвоение showImage.

0 голосов
/ 29 ноября 2018

Объяснение:

let showImage = imageHandler?(imageView) ?? false

Во-первых, imageHandler - это блок кода, который объявлен как принимающий UIImageView, и все imageHandler может быть* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 100 * * * * * * * * * * * * * * * * * * * * * * * * *} * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}} *}} *} * * * * * * * * * * *

* * * * * * * * * * * * * * * * *} * * * * * * * * * * * * *} * * * * * * * * 101 '* * * * * * * * * * *' '' '' '' 101} * * * * * * * * * * * * * * * * * * * * * 101 ''} * 1018 '* * * * * * * * * * * * 1017' * * * * * * * * * * * * * 101 '* * * * * * * * * * * * 101' BOOL.Но сам imageHandler не является обязательным.Таким образом, если imageHandler само по себе равно nil, то какое значение должно быть присвоено в showImage.Таким образом, этот код решает, что false с использованием nil-coalescing.

Вы можете просто использовать необязательную распаковку следующим образом

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

Так что я думаю, что вы получили все, что хотите знать.

0 голосов
/ 29 ноября 2018

Если установлен необязательный imageHandler, вызов к нему завершается успешно, и возвращаемое значение разворачивается и присваивается showImage.В противном случае для showImage устанавливается значение false.

Необязательная цепочка: https://docs.swift.org/swift-book/LanguageGuide/OptionalChaining.html

Оператор ноль-коалесцирования: https://docs.swift.org/swift-book/LanguageGuide/BasicOperators.html

0 голосов
/ 29 ноября 2018

Это необязательное связывание. Государственные деятели это утверждение равно следующему ...

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

В необязательном построении цепочек мы пишем его как ваш пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...