Как сказал Хэмиш , может быть, лучше оставить init снаружи, чтобы он был более гибким.Однако может быть своего рода обходной путь для этого с использованием протокола.
protocol Initializable {
init()
}
extension Initializable {
static func new(_ initialization: (inout Self) -> Void) -> Self {
var newSelf = Self()
initialization(&newSelf)
return newSelf
}
}
extension NSObject: Initializable {}
NSObject
уже имеет init
, поэтому он автоматически соответствует Initializable
.Затем напишите свое расширение в протоколе.
Единственное, что нужно знать, это то, что вы не можете использовать модификатор class
сейчас, поскольку вы находитесь в protocol
.
Не уверен, что это может привести к проблеме для модификатора NS_UNAVAILABLE
, я думаю, что он может произойти сбой во время выполнения, когда вы используете его в классе, который скрывает инициализацию.