Инициализация объекта модели без опций

Объект модели заполняется с помощью метода JSONDecoder. Поскольку необходимо передать его в табличном представлении, мне нужно инициализировать локальную переменную типа KBArticle на стороне пользовательского интерфейса. Есть ли какой-либо возможный метод инициализации объекта KBArticle без опций или прямого доступа к внутреннему массиву?

var kbArticle = KBArticle()

Отсутствует аргумент для параметра from в вызове. Вставьте «от: ‹#Decoder#›»

/// UI Side
var kbArticle = KBArticle()

override func viewDidLoad() {
    super.viewDidLoad()
    /// Web services call method
    SDKCore.getInstance.getKbService().fetchKbArticles(with: topicID) { (result) in
        switch result {
        case .success(let kbArticle):
            self.kbArticle = kbArticle
            DispatchQueue.main.async { 
                self.tableView.reloadData() 
            }
        case .failed(let e):
            print("Error=\(e)")
        }
    }
}


// Model Class in SDK
public struct KBArticle: Codable {
    public let id: Int
    public let topic: String
    public let articleCount: Int
    public let articles: [Article]
}

public struct Article: Codable {
   public let id: Int
   public let subject: String
}

 /// Method in SDK
 public func fetchKbArticles(with topicId: Int, completionHandler: @escaping (ResultModel<KBArticle, Error>) -> Void) {
    let request = GetKBArticles(topicId: topicId)
    
    Networking.shared.performRequest(request) { (response) in
        switch response {
        case .success(let response):
            do {
                let decoder = JSONDecoder()
                let result = try decoder.decode(KBArticle.self, from: response.data!)
                completionHandler(.success(result))
                
            } catch let error {
                completionHandler(.failed(error))
            }
        case .failed(let error):
            completionHandler(.failed(error))
        }
    }
}

Я должен использовать эту структуру articles внутри структуры kbArticle для предоставления моего источника данных tableview. Можно ли инициализировать объект kbArticle без первичной инициализации с использованием нулевых значений???


person Vaisakh KP    schedule 01.01.2019    source источник
comment
см. этот stackoverflow.com/a/52116454/9315978   -  person a.masri    schedule 01.01.2019
comment
или вы можете установить значение по умолчанию для всех параметров   -  person a.masri    schedule 01.01.2019


Ответы (1)


Если вам нужен новый объект без необязательных параметров, вы можете установить значение по умолчанию для всех параметров.

ex :

public struct KBArticle: Codable {
    public var id: Int = 0
    public var topic: String = ""
    public var articleCount: Int = 0
    public var articles: [Article]?

}

public struct Article: Codable {
    public var id: Int = 0
    public var subject: String = ""
}

Использование: let myObj = KBArticle()

Пожалуйста, проверьте этот ответ

person a.masri    schedule 01.01.2019