Почему я получаю ошибку valueForUndefinedKey при использовании AnyObject в Swift? - PullRequest
0 голосов
/ 08 июля 2020

У меня вопрос. Почему следующая cra sh причина? поскольку "имя" существует?

viewcontroller1:


struct pointDict {
    let id: Int
    let name: String
}
var pointsPlane: [pointDict] = []

let wp = pointDict(id: 123, name: "test")
pointsPlane.append(wp)

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {


if let destVC = segue.destination as? viewcontroller2 {
destVC.dt = pointsPlane[0] as AnyObject

}
}

viewcontroller2:

var dt: AnyObject?
let detail = self.dt
name.text = detail?.value(forKeyPath: "name") as? String

Cra sh Report:

valueForUndefinedKey :]: этот класс не соответствует кодированию значения ключа для имени ключа

1 Ответ

1 голос
/ 08 июля 2020

AnyObject - ссылочный тип, но структура - это тип значения и, следовательно, не совместим с кодированием Obj C ключ-значение.

В любом случае ваш подход - плохая практика. быстрый способ - объявить свойства с реальным типом. Объявление по умолчанию detail в шаблоне не требуется.

viewcontroller1:

struct PointDict {
    let id: Int
    let name: String
}
var pointsPlane: [PointDict] = []

let wp = PointDict(id: 123, name: "test")
pointsPlane.append(wp)

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    if let destVC = segue.destination as? viewcontroller2 {
        destVC.dt = pointsPlane.first
    }
}

viewcontroller2:

var dt : PointDict? 

override func viewDidLoad() {
    super.viewDidLoad()
    name.text = dt?.name ?? ""
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...