【发布时间】:2016-07-19 18:32:41
【问题描述】:
我需要关于我应该采取的最佳方法的建议。
我有很多来自服务器的数据,我需要将其解析为结构。
假设我从服务器获取seller 信息,结构可能如下所示:
struct Seller {
var firstName: String?
var lastName: String?
var address: String?
}
我为此创建了一个协议,并让我的卖家结构采用它。所以我的代码现在看起来像这样:
protocol SellerProtocol {
var firstName: String {get set}
var lastName: String {get set}
var address: String {get set}
}
extension Seller: SellerProtocol {
var firstName: String?
var lastName: String?
var address: String?
}
问题:有没有办法让这个协议中的所有变量动态地变成非可选的?
问题是,我有很多这样的可选协议,但是,我还需要声明完全相同协议的非可选版本,以便其他类可以遵守它。我只希望与服务器直接交互的结构是可选类型(因为来自服务器的数据可以包含 nil),但是在处理来自服务器的信息之后,我想创建一个非可选结构。
那么我需要维护完全相同协议的两个版本吗?可选版本和非可选版本?
【问题讨论】:
-
我相信您想要做的是将协议声明为非可选的,然后使用可失败的初始化程序来创建您的结构。这样,如果您缺少某些属性,对象初始化将失败,但如果初始化成功,您将拥有所需的所有数据。
-
谢谢.. 但你为什么不写一个答案?我不能接受评论作为答案。
-
@AdamPro13:我同意,这就是要走的路
标签: ios swift generics swift-protocols