Swift 传入结构作为函数参数

标签 swift

我有一个这样的JSON解析类

class JSONParser: NSObject {
    let newJSONDecoder : JSONDecoder
    let data : Data

    init(decoder: JSONDecoder, data: Data, model:  ) {
        self.newJSONDecoder = JSONDecoder()
        self.data = data
    }
}

目标是让 model 参数成为一个可以接收任何数据和任何模型并创建一个对象并将其返回给调用类实例的类。下面的EG

let jsonParser = JSONParser(myDecoder, data, struct)
let parsedArray = jsonParser.createJSONArray()

我可以将结构传递给类型为 struct 而不是结构“类”名称(例如 ModelStruct)的 JSONParser init 方法吗?

最终,应该在这个函数中使用结构参数

试试 newJSONDecoder.decode(model.self, from:data!),所以第二个问题是如何将它放入该函数中 - 如果打印为字符串,则无法使用。

最佳答案

您可以执行如下操作:

class JSONParser: NSObject {
    let newJSONDecoder : JSONDecoder
    let data : Data

    init<T: Codable>(data: Data, model: T.Type) {
        self.newJSONDecoder = JSONDecoder()
        do {
        let result = try self.newJSONDecoder.decode(model.self, from: data)
        print(result)
        } catch let err {
            print(err.localizedDescription)
        }
        self.data = data
    }
}

你的模型结构:

struct TestModel: Codable {
    let name: String
    let age: Int
}

如何调用 init:

let str = """
        {"name": "Robert", "age" : 35}
        """

    let data = str.data(using: .utf8)
    let jsonParser = JSONParser(data: data!, model: TestModel.self)

关于Swift 传入结构作为函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52159113/

相关文章:

ios - 坚持以编程方式将目标添加到按钮

ios - @noescape、@escaping 和@autoclosure 之间有什么区别?

ios - 如果 iOS 和设备低于 iOS11 和 iphone 8,提示用户使用 UIAlertController?

swift - 在 Swift 中将数组传递给具有可变数量参数的函数

iOS 网络连接失败策略建议

ios - UIView 什么时候知道它有多大?

swift - Sinch Sms Verification 2.0.3 SDK Swift 3

具有符合协议(protocol)的类的 Swift 集合

ios - if else 使用三元

ios - Swift UITableview 自定义单元格 Imageview 颜色更改在另一个函数中