我想在我的协议或枚举中使用关键字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)
)
}
}