Swift 我可以在协议中使用init func吗?
当我尝试以这种方式实施协议时:Swift 我可以在协议中使用init func吗?,swift,initialization,protocols,swift-protocols,Swift,Initialization,Protocols,Swift Protocols,当我尝试以这种方式实施协议时: protocol Serialization { func init(key keyValue: String, jsonValue: String) } 我得到一个错误,说:函数声明中需要标识符。 为什么会出现此错误?是的,您可以。但是您从未将func放在init前面: protocol Serialization { init(key keyValue: String, jsonValue: String) } 这里的要点是: 协议和实现它
protocol Serialization {
func init(key keyValue: String, jsonValue: String)
}
我得到一个错误,说:函数声明中需要标识符。
为什么会出现此错误?是的,您可以。但是您从未将
func
放在init
前面:
protocol Serialization {
init(key keyValue: String, jsonValue: String)
}
这里的要点是:
init
方法前面从来没有关键字func
init
方法,因此现在需要在init
方法前面加上关键字required
。这表明您遵守的协议要求您使用此init
方法(尽管您可能独立地认为这是一个好主意)protocol Serialization {
init(key keyValue: String, jsonValue: String)
}
例如,符合此协议的类可能如下所示:
class Person: Serialization {
required init(key keyValue: String, jsonValue: String) {
// your logic here
}
}
请注意
init
方法前面的required关键字。为什么要在协议中使用该关键字?为什么它关心类型是如何创建的?一个对象可以有多个init函数。为什么不让协议指定一个可以被调用的函数呢?这是因为func
关键字正好在init
之前。删除它,然后再试一次。@马克:例如,NSCoding
Thank Windor。就是这样。你能解释一下为什么不把func放在init前面吗?谢谢。@LiweiZ:因为初始值设定项和方法是分开的,谢谢。我想我需要再看一次开发者文档:)好的,Swift以其风格一致性而闻名,这对新手来说是非常不一致和混乱的。谢谢你的回答。