为什么我不能像库类一样在Swift中继承多个类?

34

我试图通过继承两个类来创建myPet, 但是会出现错误,例如:

import UIKit
class SecondViewController: UIViewController, UITextFieldDelegate {
    // No Error
}

接下来定义了以下类,然后创建新类myPets,我想从Dog和Substance两个类继承。但是出现错误:从类'Dog' 和 'Substance' 进行了多重继承。

那么修改一下代码,让myPets只继承一个父类,就可以避免这个错误了。

class Dog:Animal {
    func sound()->String {
        return "Hong Hong"
    }
}

class Substance {
    func livingCompound()->String {
        return "Consist of bio-molecule"
    }
}

class myPets:Dog, Substance {
    func itsAddress()->String {
        // Error:Multiple inheritance from classes 'Dog' and 'Substance'
    }
}
1个回答

71

1
继承该类后,采用协议!明白了。 - PKul
75
我认为这种语法有点误导。在 Obj-C 中,协议是用 "< >" 括起来的,但现在它们与其他内容排列在同一行,不太易读。希望一些苹果 Swift 工程师能看到这个问题,并添加一种语法来使代理更加明确 - 如果你同意,请点赞。(纯属愿望 ;) ) - Paweł Brewczynski
18
意见不同 :) 我其实更喜欢现在的 Swift 语法,比起 Objective C 语法来,而且我也不觉得它很难理解。我一直认为 Objective C 的语法中带有< > 不太符合我的自然习惯。 - Wojtek Surowka
17
即使他们最终不使用 <>,我仍然希望有一种区分协议和类的方式。 - scottysseus
1
毫无疑问,这是最具误导性的(接口/协议)语法。 - Pablo
在整个项目中使用<>会让代码变得混乱无章,最好是使用单个符号来表示协议。如果<>再次出现,我会离开的。因为它太像xml了。没有符号就可以轻松重构,只需将协议更改为类,而不需要到处更改<>,但妥协的话一个符号还是很好的。 - Gary Davies

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接