Я следую этому руководству о том, как создать приложение AR Quicklook. Есть только несколько шагов, которые кажутся достаточно простыми. Однако на последнем шаге я получаю фатальную ошибку, потому что переменная let принудительно разворачивается. Я попытался сделать это необязательным, но я получаю разные ошибки, такие как:
Необязательная цепочка не имеет никакого эффекта, выражение уже производит 'URL?'
Если я удалю необязательный, я получу это предупреждение в следующей строке:
URL? не конвертируется в 'QLPreviewItem'; Вы хотели использовать «как!» заставить опуститься?
Если я принудительно разверну эту строку, приложение вылетает. Я не могу понять, как обойти это. Я даже посмотрел официальное видео здесь , и примерно в 14:30 они также имеют тот же код, где они принудительно разворачивают эту строку.
@IBOutlet var collectionView: UICollectionView!
let models = ["A", "B", "C", "D", "E"]
var thumbnails = [UIImage]()
var thumbnailIndex = 0
override func viewDidLoad() {
super.viewDidLoad()
for model in models {
if let thumbnail = UIImage(named: "\(model).jpg") {
thumbnails.append(thumbnail)
}
}
collectionView.dataSource = self
collectionView.delegate = self
collectionView.reloadData()
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return models.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "LibraryCell", for: indexPath) as? LibraryCollectionViewCell
if let cell = cell {
cell.modelThumbnail.image = thumbnails[indexPath.item]
let title = models[indexPath.item]
cell.modelTitle.text = title.capitalized
}
return cell!
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
thumbnailIndex = indexPath.item
let previewController = QLPreviewController()
previewController.dataSource = self
previewController.delegate = self
present(previewController, animated: true)
}
func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
return 1
}
func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
let url = Bundle.main.url(forResource: models[thumbnailIndex], withExtension: "usdz")!
return url as QLPreviewItem
}