假设这三个类具有这个简单的层次结构:classA{funcfoo(){print("A")}}classB:A{overridefuncfoo(){super.foo()print("B")}}classC:B{overridefuncfoo(){//*******print("C")}}在C类中,在覆盖方法foo中我想调用一个方法foo:是否可能?在C++中,这可以通过C->A::foo()实现,但我如何在Swift中做到这一点? 最佳答案 super.foo()应该足够了,因为B打印"B"并调用super打印"A"。classC
在Swift中,super的初始化器应该在当前类的所有属性都被初始化之后调用。然而,对于Objective-Cinit并没有这样做,其中在初始化当前类中的属性之前首先调用superinit。Swift试图通过强制执行此操作来防止哪些问题?为什么Objective-C能够避免Swift试图避免的问题? 最佳答案 WhatissuesisSwifttryingtopreventbyenforcingthis?这是一个很好的问题,Objective-C并没有回避它。问题是,当您在初始化方法中时,对象在技术上处于部分构造状态。Bryan's
这个问题在这里已经有了答案:Swiftequivalentto__attribute((objc_requires_super))?(1个回答)关闭6年前。我有一个父类(superclass),它有一个方法的基本实现(在我的例子中是prepareForSegue:sender:),我想确保覆盖此方法的任何子类都调用父类(superclass)的实现。classA{funcfoo(){//Somebasicsharedbehavior}}classB:A{overridefuncfoo(){//IwantthecompilertoyellatmeifIforgetsuper.foo()h
我试图实现一种新方法来连接两个Array,返回一个包含通用数据类型的Array给其他两个。为了清楚起见,我希望有一种方法可以做类似的事情(知道语法不正确......):@infixfunc+(left:Array,right:Array)->Array{//joinbotharrays}总是认为编译器能够检测两个类的共同祖先类型。如果这实际上是不可能的,那么正确的方法是什么?使“super”类型显式化? 最佳答案 Swift的类型推断比您想象的要聪明。秘诀是查看nil-coalescing运算符的签名??:func??(option
在Swift中你可以创建继承:classA{}classB:A{}在此示例中,B继承自A。如果我在B中创建一个函数,有没有一种方法可以获得对它的父类(superclass)A的引用?我在想它会是这样的:self.super或者self.super()或者self.parent我尝试了所有这些,但没有一个对我有用。有谁知道如何获得对父类(superclass)的引用? 最佳答案 它的一个纯Swift版本,可以在Linux上运行,但依赖于一个不太官方的API是:classA{}classB:A{}letsuperclass=Swift.
我知道这个问题的标题令人困惑,但下面的示例解释了奇怪的行为:protocolProtocol{funcmethod()->String}extensionProtocol{funcmethod()->String{return"FromBase"}}classSuperClass:Protocol{}classSubClass:SuperClass{funcmethod()->String{return"FromClass2"}}letc1:Protocol=SuperClass()c1.method()//"FromBase"letc2:Protocol=SubClass()c2.m
这个问题在这里已经有了答案:ErrorinSwiftclass:Propertynotinitializedatsuper.initcall(12个答案)关闭6年前。我有一个派生自UIView的类,但我初始化它时总是显示错误“Property'self.title'notinitializedatsuper.initcallinswift”这是我的代码classA:UIView{vartitle:StringvarrecordUrl:Stringvarcontent:Stringrequiredinit?(coderaDecoder:NSCoder){fatalError("init(
我正在尝试找到合并Swift数组的最佳方法,这些数组的类型不同,但它们具有相同的父类(superclass)。我已经阅读了所有教程,所以我知道我可以使用:vararray=["Some","Array","of","Strings"]array+=["Anotherstring","andonemore"]array.append(["Or","This"])在这种情况下array变量推断类型[String].我遇到的问题与类的下一个假设情况有关(在这种情况下属性无关紧要,只是为了在类之间产生差异):classA{varproperty1:String?}classB:A{varpro
我想实现UISearchController,使用本教程逐步进行:SearchforplacesusingMKLocalSearchRequestanddisplayresultswithUISearchController在这个部分...SearchforlocationsusingMKLocalSearchRequest...我对第3步有疑问。设置TableView数据源extensionLocationSearchTable{overridefunctableView(tableView:UITableView,numberOfRowsInSectionsection:Int)-
假设有一个抽象类,比如A,和两个非抽象子类,比如A1和A2。我想通过使用GSONlibrary从json格式“反序列化”它们.例如我得到一组A对象。intn=...;A[]list=newA[n];A[0]=newA1(....);A[1]=newA2(....);...有人将其转换为JSON字符串,如下所示:Stringjson=(newGson()).toJson(list);最后,如果我尝试反序列化如下A[]deserializedList=(newGson()).fromJson(json,A[].class);然后我得到了一个错误,因为GSON默认反序列化器找到了一个抽象类(