如何设置协议的可选属性?例如,UITextInputTraits具有许多可选的读/写属性。当我尝试以下操作时,出现编译错误(无法在“
textInputTraits”中分配给“ keyboardType”):
func initializeTextInputTraits(textInputTraits: UITextInputTraits) {
textInputTraits.keyboardType = .Default
}
通常,在访问协议的可选属性时,您会添加问号,但这在分配值时不起作用(错误:无法分配给该表达式的结果):
textInputTraits.keyboardType? = .Default
该协议如下所示:
protocol UITextInputTraits : NSObjectProtocol {
optional var keyboardType: UIKeyboardType { get set }
}
在Swift中是不可能的(还好吗?)。从ADF线程引用:
可选属性要求和返回值的可选方法要求,在访问或调用它们时,将 始终返回 适当类型 的可选值 ,以反映 可能尚未实现
可选要求的事实。因此,轻松获得可选值也就不足为奇了。但是,设置属性需要 保证 实现。
问题内容: 为什么我可以做到这一点而没有任何错误: 虽然我定义了这个: 如果我的协议中的定义大部分被忽略(getter,setter定义),为什么我仍要使用它们? 问题答案: 根据官方文件: 可以通过多种方式通过符合类型来满足吸气剂和设置剂的要求。如果属性声明同时包含get和set关键字,则符合条件的类型可以使用存储的变量属性或既可读又可写的计算属性(即,同时实现getter和setter的)来实
协议(Protocols)为方法,属性和其他需求功能提供了蓝图。 它为方法或属性骨架而不是实现。 通过定义类,函数和枚举,可以进一步完成方法和属性的实现。 协议的一致性满足了协议要求的方法或属性。 语法 协议也遵循与类,结构和枚举类似的语法 - 协议在类,结构或枚举类型名称之后声明。 单个和多个协议声明也是可以的。 如果定义了多个协议,则必须用逗号分隔。 当要为超类定义协议时,协议名称应使用逗号跟
协议规定了用来实现某一特定功能所必需的方法和属性。 任意能够满足协议要求的类型被称为遵循(conform)这个协议。 类,结构体或枚举类型都可以遵循协议,并提供具体实现来完成协议定义的方法和功能。 语法 协议的语法格式如下: protocol SomeProtocol { // 协议内容 } 要使类遵循某个协议,需要在类型名称后加上协议名称,中间以冒号:分隔,作为类型定义的一部分。遵循
问题内容: 假设我有以下协议: 而且我有以下结构: 如您所见,我必须“遵循”结构A和结构B中的Identifiable协议。但是想象一下,如果我还有N个需要符合该协议的结构……我不想“复制/粘贴” ‘一致性(变量ID:整数,变量名称:字符串) 所以我创建了一个 协议扩展 : 现在,通过此扩展,我可以创建符合Identifiable协议的结构,而不必同时实现这两个属性: 现在的问题是我不能为id属性
问题内容: 在Swift中有可能吗?如果没有,那么是否有解决方法? 问题答案: 1.使用默认实现(首选)。 优点 不涉及Objective-C运行时 (至少没有明确 涉及 )。这意味着您可以使其符合结构,枚举和非类。同样,这意味着您可以利用强大的泛型系统。 *当遇到符合此类协议的类型时, *您始终可以确保满足所有要求 。它始终是具体实现或默认实现。这就是“接口”或“合同”在其他语言中的行为方式。
在 Swift 中可能吗?如果没有,那么是否有解决方法可以做到这一点?