gpt4 book ai didi

swift - init() 与 Swift 协议(protocol)有什么关系?

转载 作者:搜寻专家 更新时间:2023-10-30 22:11:13 25 4
gpt4 key购买 nike

Swift 中的协议(protocol)可以在其定义中声明 init() 方法。但是,除了强制符合标准的类按照协议(protocol)中的方式定义 init() 之外,我想不出任何用例可以解决任何问题。我们可以在协议(protocol)类型上调用声明的方法,但协议(protocol)上的 init 不能用于实例化其对象,这是它的唯一目的。

在协议(protocol)中声明init()方法解决了什么问题?

最佳答案

我认为真正的效用是在通用类 o 函数中用作约束时出现的。这是我的一个项目中的真实代码。

我用 init 声明了一个协议(protocol):

protocol JSONCreatable {
init(fromJson json: JSON)
}

然后,在一个通用函数中,我返回一个符合该协议(protocol)的类:

import SwiftyJSON

extension JSON {
func asObject<T>() -> T? where T: JSONCreatable {
if isEmpty {
return nil
}
return T(fromJson: self)
}

func asArray<T>() -> [T] where T: JSONCreatable {
return array?.map{ json in T(fromJson: json) } ?? []
}
}

这让我可以做这样的事情:

let user: User = json["user"].asObject()
let results: [Element] = json["elements"].asArray()

关于swift - init() 与 Swift 协议(protocol)有什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42694315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com