我有一个自定义UIControl,我实现为:requiredinit(coder:NSCoder){super.init(coder:coder)initSubComponents()}funcinitSubComponents(){//DisplayUIControlborderforvisualdebuggingself.layer.borderColor=UIColor.redColor().CGColorself.layer.borderWidth=3.0subviewContainer=UIView(frame:self.bounds.rectByInsetting(dx:0
我不认为publicinit?(coderaDecoder:NSCoder)中的问号是关于可选项的。此外,当我覆盖它时,我发现我根本不需要写问号。那么这到底是什么意思呢?---更新---下面的评论帮助我弄明白了。它被称为“可失败的初始化程序”。另一个可以使概念更容易理解的例子是UIFont的便利初始化,因为UIFont可能不存在。public/*notinherited*/init?(namefontName:String,sizefontSize:CGFloat) 最佳答案 它被称为可失败初始化器。在TheSwiftProgram
在Swift3之前,您可以像这样使用NSCoder解码bool值:ifletvalue=aDecoder.decodeObjectForKey(TestKey)as?Bool{test=value}Swift3中建议的方法是改用它:aDecoder.decodeBool(forKey:TestKey)但是decodeBool的类引用没有解释如果您正在解码的值实际上不是bool值时如何处理这种情况。您不能在let语句中嵌入decodeBool,因为返回值不是可选的。如何在Swift3中安全地解码值? 最佳答案 我花了很长时间才弄清楚,
我必须存档一个值为INFINITY的float,然后再将其取消存档。这是我的示例代码:要归档的对象:@interfaceCodeInf:NSObject@end@implementationCodeInf-(void)encodeWithCoder:(NSCoder*)encoder{floatinf=INFINITY;[encoderencodeFloat:infforKey:@"INFINITY"];}-(id)initWithCoder:(NSCoder*)decoder{if(self=[superinit]){floatdecodedInf=[decoderdecodeFlo