草庐IT

default-lazy-init

全部标签

Swift 子类的 init 必须在调用 super 之前设置所有属性,但是属性需要 super 的 init 先完成

我正在尝试编写两个Swift类,一个是另一个的子类,需要采用父类(superclass)的一个属性并使用它来配置自身。classBaseClass{letsomeValue:Doubleletsize:CGSizeinit(size:CGSize){self.size=sizeself.someValue=size.width/2.0//Doesn'treallymatterhowthisiscalculated}}classSubclass:BaseClass{letsomeNewValue:Doubleoverrideinit(size:CGSize){super.init(siz

ios - Swift UIViewController Custom init() - 错误无法分配给自己

在Objective-C中,我曾经覆盖UIViewController的init方法。我无法在Swift中实现相同的目标:Objective-C代码:-(instancetype)init{self=[superinit];if(self){self=[[UIStoryboardstoryboardWithName:@"Main"bundle:[NSBundlemainBundle]]instantiateViewControllerWithIdentifier:@"ViewController"];}returnself;}如果我尝试在Swift中这样做,我会收到“无法分配给自己”的

ios - 什么时候在 UIView 或 UIViewController 上调用 "required init?(coder aDecoder: NSCoder)"?

当我使用存储属性创建UIView或UIViewController的子类时,除非我包含requiredinit的实现,否则Xcode不会编译我的项目?(编码器aDecoder:NSCoder).目前,我有以下实现来关闭编译器:requiredinit?(coderaDecoder:NSCoder){fatalError()}我明白为什么我需要包含这个初始化程序;我的子类需要符合NSCoding协议(protocol),因为它的父类(superclass)符合它,并且这个初始化程序是NSCoding协议(protocol)的一部分,所以它需要与我的类一起工作,即初始化我类的所有存储属性(

swift - Swift 中 Lazy var 和 var as-a-closure 的区别

我创建了一些示例项目来测试各种类型的变量实现,以测试哪些只执行一次,哪些每次调用都执行classSomething:NSObject{varclock:Int=0overridevardescription:String{letdesc=super.descriptionclock+=1return"\(desc)Clock:\(clock)"}}staticvarstaticVar:Something{print("staticVar")returnSomething()}staticvarstaticVar2:Something={print("staticVarII")retur

ios - DispatchQueue.global(qos : . default) 在后台或锁屏时继续,如何暂停?

Swift新手:将Objective-CAppleHealth集成代码移植到Flutter/Dart调用的Swift。当我后台运行或锁定旧版Obj-C应用程序时,它几乎会立即暂停所有执行。但是,在我的Swift代码端口中并没有发生相同的行为,我在Swift中使用与旧版Obj-C应用程序中相同的DispatchQueue,之所以暂停很重要,是因为一旦用户锁定iPhone屏幕,AppleHealth就会加密其所有数据,并且它不可用。我的理解也是正确的,当您暂停DispatchQueue时,当前正在执行的block将完成,但后续block将不会开始执行。据我所知,Swift代码移植模仿了Ob

swift - 为什么我现在必须在 Swift 中覆盖我的 init?

importFoundationclassStudent:NSObject{varname:Stringvaryear:Intvarmajor:Stringvargpa:Stringinit(name:String,year:Int,major:String,gpa:String){self.name=nameself.year=yearself.major=majorself.gpa=gpa}convenienceinit(){//callslongerinitmethodwrittenabove}}--错误显示在convenienceinit行Overridingdeclarati

swift - 初始化器要求 'init(json:)' 只能由非最终类 `required` 定义中的 'UIColor' 初始化器满足

我正在尝试编写一个扩展来满足扩展中的协议(protocol):extensionUIColor:JSONRepresentable{convenienceinit?(json:Any){guardletcolourArray=jsonas?[CGFloat]else{print("jsonwasnotanarrayofCGFloats")returnnil}self.init(red:colourArray[0],green:colourArray[1],blue:colourArray[2],alpha:colourArray[3])}}我收到这个错误:Initializerrequ

swift - 整数类型 : Cannot invoke 'init' with an argument of type 'T'

我有一个返回范围内整数的函数:funcrandomNumber(min:T,max:T)->T{letn=max-min+1letu=UInt32(n)//Error:Cannotinvoke'init'withanargumentoftype'T'letr=arc4random_uniform(u)returnr+min}我不明白为什么这不起作用,因为UInt32最上面的协议(protocol)是UnsignedIntegerType,它符合IntegerType。我必须将n变成UInt32因为arc4random_uniform()需要一个UInt32作为参数为什么这行不通?

ios - 错误 : Use of 'self' in property access 'texture' before super. init 初始化自身

我是swift的新手,我正在尝试通过以下方式学习swift创建一个简单的纸牌游戏。我从视频中输入了完全相同的代码。但是xcode显示错误“在super.init初始化self之前在属性访问‘texture’中使用‘self’”感谢您的帮助!importSpriteKitclassCard:SKSpriteNode{varrank:Intvarsuit:StringvarimageNameUp:StringvartextureUp:SKTexturevartextureDown:SKTextureinit(rank:Int,suit:String,faceUp:Bool){self.ra

ios - 如何在 Swift 中调配 init

我正在关注Swift&theObjective-CRuntime,它适用于普通方法。我喜欢调配init方法,据我了解,init就像一个类方法。所以我尝试将init作为实例和类方法进行调配。但是好像不行我可以使用ObjectiveC让它工作,只是想知道如何让它在Swift中工作摘self的gistdispatch_once(&Static.token){letoriginalSelector=Selector("init:source:destination:")letswizzledSelector=Selector("ftg_init:source:destination:")let