Свифт необязательный синтаксис - PullRequest
0 голосов
/ 22 января 2019

Я написал некоторый код, который работает, но использует слишком много принудительных развертываний.Так что я исправил это, но есть лучший способ ...

var currentTask: Tasks?
var photoArray: [Photo]?
@IBOutlet var photoButton: [TaskImageButton]!

photoArray = Array(currentTask?.photos) as? [Photo]

if photoArray!.count > 0 {
   for i in (photoArray?.indices)! {
      photoButton[i].setImage(UIImage(data: photoArray![i].imageData!), for: .normal)
   }
}

Мое попытанное решение:

if let photoArraySize = photoArray?.count  {
   if photoArraySize > 0 {
      for i in (photoArray?.indices)! {
         if let photoData = photoArray?[i].imageData {
            photoButton[i].setImage(UIImage(data: photoData), for: .normal)
          }
       }
    }
}

Ответы [ 3 ]

0 голосов
/ 22 января 2019

Это может быть чище, если вы сначала извлечете массив из необязательного

Кроме того, вам не нужно проверять, является ли число больше 0, потому что если массив пуст (count = 0), то цикл не будет выполняться.

if let array = photoArray {
    for i in array.indices {
        photoButton[i].setImage(UIImage(data: array[i].imageData), for: normal)
    }
}

Я не знаю о классе Photo, но если imageData также является необязательным, то:

if let array = photoArray {
    for i in array.indices {
        if let photoData = array[i].imageData {
            photoButton[i].setImage(UIImage(data: photoData), for: .normal)
        }
    }
}
0 голосов
/ 22 января 2019

Лучший способ - объявить массив фотографий как необязательный

var photoArray = [Photo]()

...

photoArray = (Array(currentTask?.photos) as? [Photo]) ?? []

...

for (index, photoData) in photoArray.enumerated() where photoData.imageData != nil {
   photoButton[index].setImage(UIImage(data: photoData.imageData!), for: .normal)
}
0 голосов
/ 22 января 2019

Разверните photoArray один раз, а остальная часть кода будет намного проще:

if let photoArray = photoArray {
    for i in photoArray.indices {
        photoButton[i].setImage(UIImage(data: photoArray[i].imageData), for: .normal)
    }
}

Если imageData не является обязательным, вам необходимо:

if let photoArray = photoArray {
    for i in photoArray.indices {
        if let imageData = photoArray[i].imageData {
            photoButton[i].setImage(UIImage(data: imageData), for: .normal)
        }
    }
}

И строка:

photoArray = Array(currentTask?.photos) as? [Photo]

, вероятно, можно записать как:

photoArray = currentTask?.photos

Но без более подробной информации о задействованных типах трудно быть уверенным.

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