Тип Cast из класса A в объект класса B, который использует тот же протокол в Swift - PullRequest
0 голосов
/ 11 марта 2020

Приведение из 'A' к несвязанному типу 'B' всегда завершается неудачей

protocol P {
    var name: String { get set }
    var age: Int { get set }
}

class A: P {
    var name: String

    var age: Int

    var address: String

    init(na: String, ag: Int, a: String) {
        self.name = na
        self.age = ag
        self.address = a
    }
}

class B: P {
    var name: String

    var age: Int

    var number: String

    init(na: String, ag: Int, nu: String) {
        self.name = na
        self.age = ag
        self.number = nu
    }
}

var a = A(na: "Aa", ag: 20, a: "not")
var b = B(na: "Ra", ag: 22, nu: "23232")

if let n = a as? B {
    print(n)
}

Как я могу привести объект для доступа к общему свойству?

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

вы можете получить свой объект как тип 'P', например

let n: P = a
0 голосов
/ 11 марта 2020

Вам не нужно ничего разыгрывать. Просто относитесь к A и B как к P. Предполагая, что вы используете игровую площадку, вы можете сделать что-то вроде этого.

var a = A(na: "Aa", ag: 20, a: "not")
var b = B(na: "Ra", ag: 22, nu: "23232")

func show(_ p: P) {
    print("Name: \(p.name)")
    print("Age: \(p.age)")
}

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