Swift 如何使initWithCoder()在取消归档无效文件时变为可失败?

Swift 如何使initWithCoder()在取消归档无效文件时变为可失败?,swift,Swift,假设我从NSKeyedArchiver创建了一个文件,该文件由第三方修改/替换。因此,当我尝试取消归档文件时。初始化对象失败应该是错误的 但是initWithCoder()不是一个失败的初始化器。因此,当数据无效时,我不能返回nil。但与此同时nskeyedunachiver在取消归档对象时可以返回nil值。所以我真的很困惑如何在initWithCoder()中返回nil对象 谢谢。使用编码器(:) 发件人: 您必须从initWithCoder:返回self。如果您有需要在解码后替换其他对象的高

假设我从
NSKeyedArchiver
创建了一个文件,该文件由第三方修改/替换。因此,当我尝试取消归档文件时。初始化对象失败应该是错误的

但是initWithCoder()不是一个失败的初始化器。因此,当数据无效时,我不能返回nil。但与此同时
nskeyedunachiver
在取消归档对象时可以返回nil值。所以我真的很困惑如何在initWithCoder()中返回nil对象


谢谢。

使用编码器(:)

发件人:

您必须从
initWithCoder:
返回self。如果您有需要在解码后替换其他对象的高级需求,您可以在
唤醒后使用coder:
执行此操作


我认为这可能在Swift 2.0中有所改变。看看API,init是可以为空的:

@protocol NSCoding

- (void)encodeWithCoder:(NSCoder *)aCoder;
- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder; // NS_DESIGNATED_INITIALIZER

@end

Xcode 7.0 beta 6版(7A192o)

谢谢。这将是问题的唯一解决方案。这是正确的-您现在可以在Swift中从
init?(编码器:)
返回
nil
。但是如果您试图从Objective-C中的
initWithCoder:
返回
nil
,Xcode仍然会抱怨。
@protocol NSCoding

- (void)encodeWithCoder:(NSCoder *)aCoder;
- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder; // NS_DESIGNATED_INITIALIZER

@end