iOS/Xcode: платформа Koloda: неожиданно обнаружено значение nil при неявном развертывании необязательного значения
Я пытаюсь внедрить эту структуру Koloda в свое приложение. (https://github.com/Yalantis/Koloda). Однако когда я запускаю свое приложение, я получаю сообщение об ошибке в строкеkolodaView.delegate = self
в котором говорится: "Неожиданно обнаружен nil при неявном развертывании необязательного значения"
Я часами пытался отладить код, но не мог понять, откуда берется значение nil. Вот мой файл контроллера представления ниже:
import UIKit
import Koloda
import pop
private let numberOfCards: Int = 5
private let frameAnimationSpringBounciness: CGFloat = 9
private let frameAnimationSpringSpeed: CGFloat = 16
private let kolodaCountOfVisibleCards = 2
private let kolodaAlphaValueSemiTransparent: CGFloat = 0.1
class CardViewController: UIViewController {
@IBOutlet weak var kolodaView: CardView!
//MARK: Lifecycle
fileprivate var dataSource: [UIImage] = {
var array: [UIImage] = []
for index in 0..<numberOfCards {
array.append(UIImage(named: "cards_\(index + 1)")!)
}
return array
}()
override func viewDidLoad() {
super.viewDidLoad()
// kolodaView.alphaValueSemiTransparent = kolodaAlphaValueSemiTransparent
// kolodaView.countOfVisibleCards = kolodaCountOfVisibleCards
kolodaView.delegate = self
kolodaView.dataSource = self
// kolodaView.animator = BackgroundKolodaAnimator(koloda: kolodaView)
// self.modalTransitionStyle = UIModalTransitionStyle.flipHorizontal
}
// //MARK: IBActions
// @IBAction func leftButtonTapped() {
// kolodaView?.swipe(.left)
// }
//
// @IBAction func rightButtonTapped() {
// kolodaView?.swipe(.right)
// }
//
// @IBAction func undoButtonTapped() {
// kolodaView?.revertAction()
// }
}
//MARK: KolodaViewDelegate
extension CardViewController: KolodaViewDelegate {
func kolodaDidRunOutOfCards(_ koloda: KolodaView) {
kolodaView.resetCurrentCardIndex()
kolodaView.reloadData()
}
func koloda(_ koloda: KolodaView, didSelectCardAt index: Int) {
let myUrl = "https://yalantis.com/"
if let url = URL(string: "\(myUrl)"), !url.absoluteString.isEmpty {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
}
func kolodaShouldApplyAppearAnimation(_ koloda: KolodaView) -> Bool {
return true
}
func kolodaShouldMoveBackgroundCard(_ koloda: KolodaView) -> Bool {
return false
}
func kolodaShouldTransparentizeNextCard(_ koloda: KolodaView) -> Bool {
return true
}
func koloda(kolodaBackgroundCardAnimation koloda: KolodaView) -> POPPropertyAnimation? {
let animation = POPSpringAnimation(propertyNamed: kPOPViewFrame)
animation?.springBounciness = frameAnimationSpringBounciness
animation?.springSpeed = frameAnimationSpringSpeed
return animation
}
}
// MARK: KolodaViewDataSource
extension CardViewController: KolodaViewDataSource {
func kolodaSpeedThatCardShouldDrag(_ koloda: KolodaView) -> DragSpeed {
return .default
}
func kolodaNumberOfCards(_ koloda: KolodaView) -> Int {
return numberOfCards
}
func koloda(_ koloda: KolodaView, viewForCardAt index: Int) -> UIView {
return UIImageView(image: UIImage(named: "cards_\(index + 1)"))
}
// func koloda(_ koloda: KolodaView, viewForCardOverlayAt index: Int) -> OverlayView? {
// return Bundle.main.loadNibNamed("CustomOverlayView", owner: self, options: nil)?[0] as? OverlayView
// }
}
Если бы кто-нибудь мог указать, как self.delegate
возвращает ноль, это будет оценено.
1 ответ
В ошибке четко указано, что что-то равно нулю, и вы не можете принудительно развернуть эту строку:
kolodaView.delegate = self
Здесь явно только kolodaView
может привести к краху. Это означает, что в следующей строке потеряна связь с раскадровкой. Подключитесь кkolodaView
в раскадровке в следующей строке.
@IBOutlet weak var kolodaView: CardView!