を型「Swift._NSContiguousString」の値をキャストできませんでした:は、私は、サービスと呼ばれるタプルのコレクションを持っている「(Swift.String、UIImage、Swift.String)」に
let services = [
(name: "iCloud", image: #imageLiteral(resourceName: "iCloudLogo"), url: "http://www.icloud.com"),
(name: "Exchange", image: #imageLiteral(resourceName: "ExchangeLogo"), url: "http://www.exchange.com")
]
私はそのコレクションビューを持っています私はこのコレクションを代表するために使用します。私は、これらの項目のタップをキャプチャし、セグエを行い、送信者として個々のタプルを渡すためにUICollectionViewDelegate
プロトコルから
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let service = services[indexPath.item]
performSegue(withIdentifier: "showAuthWindow", sender: service)
}
を使用しています。
私はこのセグをキャプチャするためにセグを準備し、viewController
のlink
プロパティを設定します。私はタプル型に戻っAny?
からsender
をキャストするときしかし、私はエラーを取得する:
Could not cast value of type 'Swift._NSContiguousString' to '(Swift.String, UIImage, Swift.String)'
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showAuthWindow" {
let service = sender as! (name: String, image: UIImage, url: String)
let authWindow = segue.destination as! AuthorisationViewController
authWindow.link = service.url
}
}
誰かが理由を教えてもらえますか?
答えをいただきありがとうございますが、すでに有効な代替方法があり、説明した規約を理解しています。しかし、この問題を尋ねる本来の目的は、この場合、なぜ「Any?」からタプルにキャストできないのかを理解することです。 – Lew