为什么我不能在Swift中使用关键字init来定义协议和枚举?



我想在我的协议或枚举中使用关键字init:

protocol Initializable {
static func init(value: String)
}

enum MyEnum {
case a, b, c
static func init(value: String) { }
}

但是Xcode说:关键字init不能在这里用作标识符!为什么不呢?如果我用了错误的帮助,它会把它纠正为'init',不确定'init'init在这里是一样的还是有什么不同,需要帮助来理解它。

一开始,我以为你忘了用反号:

static func `init`(value: String)
MyEnum.`init`(value: "🚮")

但是阅读评论,你似乎不知道Swift有初始化器,它与函数有些不同。

protocol Initializable {
init(value: String)
}

(我发现使用' init '很少有用,例如用于参数名)

public extension Decodable {
/// Initialize using 2 keyed, decoded arguments.
/// - Parameters:
///   - init: An initializer (or  factory function) whose arguments are the decoded values.
///   - keys: `CodingKey` instances, matching the arguments.
init<Parameter0: Decodable, Parameter1: Decodable, Key: CodingKey>(
_ init: (Parameter0, Parameter1) -> Self,
_ keys: (Key, Key),
decoder: Decoder
) throws {
let container = try decoder.container(keyedBy: Key.self)
self = try `init`(
container.decode(forKey: keys.0),
container.decode(forKey: keys.1)
)
}
}

最新更新