【发布时间】:2018-02-09 10:03:39
【问题描述】:
我创建了这个 Swift 类:
@objc public class Tester: NSObject {
private var name: String
private var user: Users
init(string:String, user: Users) {
print(user.empId)
print(user.name)
self.user = user
self.name = string
super.init()
}
}
我像这样从 Obj C 调用初始化程序:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
NSString * nilString = nil;
Users * nilUser = nil;
Tester * test = [[Tester alloc] initWithString:nilString user:nilUser];
return YES;
}
在这里,我将 nil 的参数传递给 Swift 初始化程序。理想情况下,我希望这会崩溃,因为初始化程序只接受非nil 值。
但实际发生的是,当执行点到达初始化器内部时,会创建新的参数对象:
nil 字符串变为"",而以前为nil 的User 变量现在指向一个对象。
但是对于这样的属性
@property(nonatomic,strong) SomeClass * object;
在哪里
object = nil;
当我从 swift 调用这个对象时,
let x = object.someGetter;
这会崩溃。
在某一时刻,如果我将 nil 传递给某个非 null,它会起作用,而在另一时刻,它会崩溃。为什么会存在这种奇怪的行为?如果由于某些原因,我的参数为 nil,并传递给 nonnull,我希望它崩溃。这样我就可以解决问题。
编辑:这变得如此出乎意料,进一步尝试使用此代码。
字符串参数实际上是字符串,但用户显示未初始化,因此对字符串的操作效果很好,但用户对象接受了更改但没有显示回来。
【问题讨论】:
标签: ios objective-c swift