Ответ 1
Проблема, которую вы видите, заключается в том, что Swift не может связывать необязательные типы значений - Int
является типом значения, поэтому Int!
не может быть соединен Необязательные ссылочные типы (т.е. Любой класс) соединяются правильно, поскольку в Objective-C они всегда могут быть nil
. Вы можете сделать два параметра необязательными, и в этом случае он будет соединен с ObjC как int
или NSInteger
:
// Swift
public init(userId: Int) {
self.init(style: UITableViewStyle.Plain)
self.userId = userId
}
// ObjC
MyClass *instance = [[MyClass alloc] initWithUserId: 10];
Или использовать необязательный NSNumber?
, поскольку это может быть соединено как дополнительное значение:
// Swift
public init(userId: NSNumber?) {
self.init(style: UITableViewStyle.Plain)
self.userId = userId?.integerValue
}
// ObjC
MyClass *instance = [[MyClass alloc] initWithUserId: @10]; // note the @-literal
Однако обратите внимание, что вы на самом деле не рассматриваете параметр как необязательный - если только self.userId
также не является необязательным, вы настраиваете себя таким образом на возможные сбои во время выполнения.