草庐IT

Initialization

全部标签

ios - 在需要的初始化中有 fatalError 可以吗?(编码器 aDecoder : NSCoder) when I don't use Storyboards?

我有一个ViewController,它需要用ViewModel:NSObject初始化。我对ViewController的实现是:classViewController:UIViewController{letviewModel:ViewModelinit(withViewModelviewModel:ViewModel){self.viewModel=viewModelsuper.init(nibName:nil,bundle:nil)}requiredinit?(coderaDecoder:NSCoder){fatalError("init(coder:)hasnotbeenim

properties - 在 Swift init 中使用 self 和不使用 self 的区别

我注意到在Swift初始化器中初始化属性可以同时使用:self.property=1和property=1这两者有什么区别吗?如果不是,是否存在一种优胜劣汰的惯例? 最佳答案 在第一个中,您明确表示它是一个类/结构属性,而在第二个中它是隐式的。但是有一个很大的区别:如果有一个同名的局部变量(例如传递给init的参数),它将优先并隐藏类/结构属性。作为一个偏好问题,我总是更喜欢通过使用self使其显式化。此外,通过这样做,我可以避免在我认为我正在访问类属性时发生常见错误,而我正在使用局部变量或函数参数。

swift - Swift 中的阶段 1 和阶段 2 初始化

这是AppleSwift文档的副本:Assoonasallpropertiesofthesuperclasshaveaninitialvalue,itsmemoryisconsideredfullyinitialized,andPhase1iscomplete.Thesuperclass’sdesignatedinitializernowhasanopportunitytocustomizetheinstancefurther(althoughitdoesnothaveto).Oncethesuperclass’sdesignatedinitializerisfinished,thes

ios - 在 swift 中处理 UIView 公共(public)初始化

像UIView这样的一些特殊类有不止一个指定的初始化器。在Objective-X中,我们可以将公共(public)初始化分解为一个单独的函数-(id)initWithCoder:(NSCoder*)aDecoder{if(self=[superinitWithCoder:aDecoder]){[selfinitialize];}returnself;}-(id)initWithFrame:(CGRect)frame{if(self=[superinitWithFrame:frame]){[selfinitialize];}returnself;}在Swift中,这不再是可能的,因为以下

ios - init! 的目的是什么?失败的初始化器?

AppleSwift编程语言指南提到了init!初始化程序,但不提供任何示例。(搜索初始化!inthispage)我了解使用init?声明的普通可失败初始化程序,但我无法理解其他版本的需要。需要它做什么?有人可以举个例子吗? 最佳答案 这有两个目的:导入Swift不知道的CocoaAPI时。如果Swift不知道初始化器是否可以返回nil,它会用!这样开发人员就知道那里可能隐藏着一个nil,而无需强制开发人员在实际上没有理由的情况下测试nil。出于同样的原因,在其他上下文中使用了隐式解包选项(在某些情况下,您可能愿意牺牲编译时安全性来

swift - 在 Swift 中在哪里初始化?

我有一个关于Swift中的初始化的非常普遍的问题。与ObjectiveC不同,现在可以在函数外的声明中直接调用init():例如classViewController:UIViewController{letmyView:UIView=UIView()overridefuncviewDidLoad(){super.viewDidLoad()myView.frame=getFrame()myView.backgroundColor=UIColor.redColor()self.view.addSubview(myView)}funcgetFrame()->CGRect{returnCGR

swift - 初始化参数中的 self

我想像这样在初始化参数中使用Self:classA{publicinit(finishBlock:((_operation:Self)->Void)?=nil){...}}我知道我可以在这个地方使用“A”,但我想实现这一点,如果某个类继承自A,那么它的初始化器将知道操作,因为它是类类型,而不仅仅是A。例如,如果我写道:classB:A{publicinit(finishBlock:((_operation:Self)->Void)?=nil){...}publicfuncfooOnlyInB(){}}然后我可以使用:letb=B{(operation)inoperation.fooOn

ios - 如何桥接 Objective-C initWithError : method into Swift

我有一个在Objective-C中定义的类,其初始化程序是-initWithError:(由于依赖外部资源,初始化程序可能会失败)。我希望它在init()throws时桥接到Swift。继承自NSObject的常规初始化程序-init可以标记为不可用,因为我不想使用它。在Objective-C中,我有:@interfaceFoo:NSObject-(instancetype_Nullable)initWithError:(NSError**)error;@end当然,这在Objective-C中工作得很好。在Swift中,-initWithError被桥接为init(error:())

快速处理 NSData 初始化失败

我有以下行:letjsonResults=NSData(contentsOfURL:Fetcher.URLforLicenseInfo())这编译和执行都很好,但是如果NSData的初始化失败,我稍后会在代码中得到一个异常。我试图添加另一行:ifjsonResults!=nil{///blah,blah...但随后编译器提示“无法使用参数列表类型'(NSData,NilLiteralConvertible)调用'!='”编译器不应该将NSData初始化程序返回类型识别为可选类型吗? 最佳答案 检查数据的长度:if(data.leng

swift - 一次初始化 4 个 CGFloats

我正在尝试在Swift中对UIColor使用getRed(green:blue:alpha:)函数。为此,我需要4个CGFloat变量(r、g、b、a)。目前,为此,我需要输入以下代码:varr:CGFloat=0varg:CGFloat=0varb:CGFloat=0vara:CGFloat=0有没有更简单的方法来写这个,可能更简洁? 最佳答案 是的,您可以使用元组来声明和初始化它们:var(a:CGFloat,r:CGFloat,g:CGFloat,b:CGFloat)=(0,0,0,0)