草庐IT

Inheritance

全部标签

swift - 为什么我们要在 Swift 中覆盖初始化器?

来自Swift'sdocumentation:UnlikesubclassesinObjective-C,Swiftsubclassesdonotinherittheirsuperclassinitializersbydefault.然后它说:Whenyouwriteasubclassinitializerthatmatchesasuperclassdesignatedinitializer,youareeffectivelyprovidinganoverrideofthatdesignatedinitializer.Therefore,youmustwritetheoverridem

Swift 中的继承和扩展

怎么做inheritance和extensions在Swift中交互?更详细地说,为父类(superclass)定义的扩展是否自动可用于子类?在那种情况下,是否存在差异问题(例如,如果扩展类型在扩展中显示为返回类型)? 最佳答案 继承和扩展如您所料相互作用。给定两个类Foo和Bar这样Bar,Foo中可用的方法和Foo的扩展对Bar可用。至于方差问题,子类可能会覆盖方法并提供更具体的返回类型。例如这里是Bar重写baz具有协变类型classFoo{funcbaz()->Foo{returnFoo()}}classBar:Foo{ov

swift - 如何根据 API 级别从 Swift 中的两个不同类派生一个类?

我想使用带有类SwipeTableViewCell(派生自UITableViewCell)的库,但它只支持iOS9,所以我想尽可能派生自该类,但如果应用程序运行在9.0以下,则派生自普通的UITableViewCell类.这是我能想到的最好的(不工作):@available(iOS,obsoleted:9.0)classMyTableViewCell:UITableViewCell{}@available(iOS9.0,*)classMyTableViewCell:SwipeTableViewCell{}然后我尝试从那个类派生:classSomeOtherTableViewCell:M

objective-c - Obj-C 工厂方法未暴露给 Swift 子类

更具体地说,imageNamed不会暴露给NSImage的Swift子类,即使继承了所有其他便利init。根据Apple的文档,Objective-C工厂方法“被映射为Swift中的便利初始化程序。”因此是NSImage工厂方法+(NSImage*)imageNamed:(NSString*)名称被映射到Swift的NSImage(命名为:“任何东西”)另外,在SwiftProgrammingLanguage一书中我们看到子类初始化继承的规则是:“规则1如果您的子类没有定义任何指定的初始化器,它会自动继承其父类(superclass)的所有指定初始化器。规则2如果您的子类提供了其所有父

Swift 3 从扩展访问结构中的私有(private)属性

我一直在浏览swift文档并研究一些关于封装的示例,但不确定我所看到的行为。我在堆栈上寻找过类似的问题,浏览了文档并浏览了一些教程(参见下面的链接),虽然这是一个微不足道的问题但找不到答案(可能是因为Swift已经改变了吗?)创建一个表示队列的简单结构:structQueue{privatevarelements=[Element]()mutatingfuncenqueue(newElement:Element){elements.append(newElement)}mutatingfuncdequeue()->Element?{guard!elements.isEmptyelse{

swift - Swift 中的继承有点令人困惑

继承在Swift中是如何工作的?根据我的理解,所有的parent都应该由他们的child代替。由于某些原因,它不起作用。下面是一个例子:publicclassCar{varmodel:StringfuncgetModel()->String?{returnmodel}}publicclassCompactCar:Car{//somecodes}publicclasscarRedo{varcartyp:Car!init(carType:Car){self.cartyp=carType}}当我将CompactCar传递给carRedo构造函数时,出现编译错误:carRedo(Compact

swift - 在 Swift 中将变量更改为子类

在Swift中,如果我有一个基类和两个从它继承的类,它们都有自己的属性。如果我将一个变量分配给基类,然后再将其更改为子类,我将无法访问所述属性。这是一个非常愚蠢的例子。这是我在紧要关头能想到的。http://swiftstub.com/927736954/?v=gmclassAnimal{letalive=true}classHuman:Animal{letsocks:Int=5}classDog:Animal{letcollar="fun"}vara:Animal!varletter="h"switchletter{case"d":a=Dog()case"h":a=Human()de

swift : import UIKit in each subclass?

在objective-C中我们可以这样做:一个。在父类(superclass)中导入文件#import"MyAwesomeClass.h"@interfaceMySuperViewController:UIViewController@end@implementationMySuperViewController-(void)viewDidLoad{[superviewDidLoad];//MyAwesomeClassallocated,initialized,usedMyAwesomeClass*awesomeClass=[MyAwesomeClassnew];}@end在父类(su

inheritance - 是否可以将 Swift 泛型类函数返回类型限制为同一个类或子类?

我正在Swift中扩展一个基类(我无法控制的基类)。我想提供一个类函数来创建一个类型为子类的实例。需要通用函数。但是,像下面这样的实现不会返回预期的子类类型。classCalculator{funcshowKind(){println("regular")}}classScientificCalculator:Calculator{letmodel:String="HP-15C"overridefuncshowKind(){println("scientific")}}extensionCalculator{classfunccreate()->T{letinstance=T()ret

ios - Swift 子类继承初始值设定项吗?

这个问题在这里已经有了答案:Classdoesnotimplementitssuperclass'srequiredmembers(4个答案)关闭6年前。我有以下代码:classParent{varfoo:Intinit(someNum:Int){self.foo=someNum}}classChild:Parent{}varparent=Parent(someNum:999)println(parent.foo)//prints"999"varchild=Child(someNum:3872)println(child.foo)//prints"3872"在Apple的2014年WW