在Objective-C中,我曾经覆盖UIViewController的init方法。我无法在Swift中实现相同的目标:Objective-C代码:-(instancetype)init{self=[superinit];if(self){self=[[UIStoryboardstoryboardWithName:@"Main"bundle:[NSBundlemainBundle]]instantiateViewControllerWithIdentifier:@"ViewController"];}returnself;}如果我尝试在Swift中这样做,我会收到“无法分配给自己”的
当我使用存储属性创建UIView或UIViewController的子类时,除非我包含requiredinit的实现,否则Xcode不会编译我的项目?(编码器aDecoder:NSCoder).目前,我有以下实现来关闭编译器:requiredinit?(coderaDecoder:NSCoder){fatalError()}我明白为什么我需要包含这个初始化程序;我的子类需要符合NSCoding协议(protocol),因为它的父类(superclass)符合它,并且这个初始化程序是NSCoding协议(protocol)的一部分,所以它需要与我的类一起工作,即初始化我类的所有存储属性(
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
我正在尝试编写一个扩展来满足扩展中的协议(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
我有一个返回范围内整数的函数: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作为参数为什么这行不通?
我是swift的新手,我正在尝试通过以下方式学习swift创建一个简单的纸牌游戏。我从视频中输入了完全相同的代码。但是xcode显示错误“在super.init初始化self之前在属性访问‘texture’中使用‘self’”感谢您的帮助!importSpriteKitclassCard:SKSpriteNode{varrank:Intvarsuit:StringvarimageNameUp:StringvartextureUp:SKTexturevartextureDown:SKTextureinit(rank:Int,suit:String,faceUp:Bool){self.ra
我正在关注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
classPerson{varname:Stringvarage:Intfuncinit(age:Int,name:String,/**...**/){self.age=ageself.name=name//...muchtyping,muchboring.}}我可能有点懒惰,但明确输入每个属性感觉很像工作中的人类编译器。在Swift中为实例分配构造函数参数是否有任何语法糖? 最佳答案 查看DefaultInitializersSwift语言书籍的一部分。如果您要使Person成为结构而不是类,它会自动获得一个成员初始化:struc
我有一个有两个初始化器的类,第一个类似于init?(){if.....{returnnil}//attributesinitialization}第二个是调用第一个的便利初始化器,但是我想检测第一个初始化器是否返回了nil,否则我不会继续我的代码。我试过类似下面的代码,但它对我不起作用。convenienceinit?(value:Int){ifletmyObject=self.init(){returnnil}self.value=value}我也尝试将它直接分配给一个变量,但看起来编译器不喜欢那样。有没有办法在不添加bool值作为属性的情况下检测它? 最
我知道还有其他类似的问题,但没有一个能回答我下面的问题。所以我有一个在XIB中定义了布局的ViewController。从另一个ViewController我想做这样的事情letdestVc=DestViewController(model:someModelData)self.showViewController(destVc,...)DestViewController定义如下:classDestViewController:UITableViewController{varmodel:SomeModelData{didSet{self.tableView.reloadData()