Есть ли способ заставить использование класса, а не подкласс в методе? - PullRequest
1 голос
/ 30 мая 2019

У меня есть родительский класс с именем BasicUser и подкласс с именем User, который наследуется от BasicUser. Когда я пытаюсь добавить обычного пользователя (класс BasicUser), используя пользователя (класс User), он пропускает весь объект User, а не только BasicUser.

Есть ли способ избежать отправки подкласса, который соответствует классу в методе?

class BasicUser {}

class User: BasicUser {}

func addAttendingUser(_ newUser: BasicUser) {

}

let user = User()
addAttendingUser(user)

EDIT: Некоторая логика за ObjectMapper. Прежде всего, он отображает Festival и, поскольку Festival имеет массив BasicUser (ParticipatingUsers), он вызывает сопоставление для BasicUser, который является User.

У пользователя есть массив followFestivals, и к нему можно получить доступ из нескольких потоков.

В классе пользователя:

override func mapping(map: Map) {
    super.mapping(map: map)
    followedFestivals <- map["followed_festivals"]
}

На фестивальном классе:

override func mapping(map: Map) {
    super.mapping(map: map)
    attendingUsers <- map["attending_users_list"]
}

1 Ответ

1 голос
/ 30 мая 2019

Самое простое - создать новый объект.

class BasicUser {

    init() {}

    init(fromOther other: BasicUser) {
        // basically copy the value from other to self
    }

}

class User: BasicUser {}

func addAttendingUser(_ newUser: BasicUser) {
    let newUser = BasicUser(fromOther: newUser)
    // do your stuff
}

let user = User()
addAttendingUser(user)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...