Как я могу создать UITableView для каждого свойства в модели? - PullRequest
0 голосов
/ 15 марта 2020

У меня есть структура, которая выглядит примерно так:

internal class RemoteProfileModel: Decodable {
  let userId: String
  let company: String
  let email: String
  let firstName: String
  let lastName: String
  let department: String
  let jobTitle: String
  let pictureUri: URL?
  let headerUri: URL?
  let bio: String
  let updatedDate: Date
}

Мне нужно перечислить эти свойства в UITableView. Мне также нужно использовать разные типы ячеек для некоторых свойств.

Я думаю, возможно, мне следует преобразовать эту структуру в словарь пар ключ / значение и использовать ключ для определения типа ячейки.

Возможно ли это? Есть ли другой способ добиться этого? Я не уверен, возможно ли преобразовать структуру в словарь, поэтому я не уверен, что это лучший способ?

1 Ответ

2 голосов
/ 15 марта 2020

для преобразования класса в словарь,

class RemoteProfileModel: Decodable {
    let userId: String
    let company: String
    let email: String

    let firstName: String
    let lastName: String
    let department: String

    let jobTitle: String
    let pictureUri: URL?
    let headerUri: URL?

    let bio: String
    let updatedDate: Date


    init() {
        userId = "666"
        company = "AAPL"
        email = "hehe@163.com"

        firstName = "user"
        lastName = "test"
        department = "guess"

        jobTitle = "poor iOS"
        pictureUri = URL(string: "wrong")
        headerUri = URL(string: "none")

        bio = "China"
        updatedDate = Date()

    }

    func listPropertiesWithValues(reflect: Mirror? = nil) -> [String: Any]{
        let mirror = reflect ?? Mirror(reflecting: self)
        if mirror.superclassMirror != nil {
            self.listPropertiesWithValues(reflect: mirror.superclassMirror)
        }
        var yourDict = [String: Any]()
        for (index, attr) in mirror.children.enumerated() {
            if let property_name = attr.label {
                //You can represent the results however you want here!!!
                print("\(index): \(property_name) = \(attr.value)")
                yourDict[property_name] = attr.value
            }
        }
        return yourDict
    }
}

Вызовите так:

    let profile = RemoteProfileModel()
    profile.listPropertiesWithValues()

В Swift Отладка и Отражение,

Зеркало описывает части, которые составляют конкретный экземпляр

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