The issue you're seeing is that Swift can't bridge optional value types -- Int
is a value type, so Int!
can't be bridged. Optional reference types (i.e., any class) bridge correctly, since they can always be nil
in Objective-C. Your two options are to make the parameter non-optional, in which case it would be bridged to ObjC as an int
or NSInteger
:
// Swift
public init(userId: Int) {
self.init(style: UITableViewStyle.Plain)
self.userId = userId
}
// ObjC
MyClass *instance = [[MyClass alloc] initWithUserId: 10];
Or use an optional NSNumber?
, since that can be bridged as an optional value:
// Swift
public init(userId: NSNumber?) {
self.init(style: UITableViewStyle.Plain)
self.userId = userId?.integerValue
}
// ObjC
MyClass *instance = [[MyClass alloc] initWithUserId: @10]; // note the @-literal
Note, however, you're not actually treating the parameter like an optional - unless self.userId
is also an optional you're setting yourself up for potential runtime crashes this way.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…