HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 我可以在swift中使用协议支持多重继承吗?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_801_0@
@H_801_0@
Swift中,通过使用扩展,您可以在“协议”中提供方法体.在我的代码中,我能够给出方法体,参见

protocol Test1{
    func display()
}
extension Test1{

    func display(){
        print("display Test1")
    }
}

protocol Test2{
    func display()
}
extension Test2{

    func display(){
        print("display Test2")
    }
}
class ViewController: UIViewController,Test1,Test2 {

    var test1 : Test1?
    var test2 : Test2?

    func display() {
        print("display")
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view,typically from a nib.

        self.test1 = self
        test1?.display()

        self.test2 = self
        test2?.display()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

我知道我在ViewController类中提供了test1和test2对象的地址.所以“显示”被打印两次.但在“协议”中,我能够使用这些方法.

所以我的问题是为什么苹果给我功能在“协议”中编写方法体?

任何人都可以帮我理解这个功能吗?

解决方法

然这个问题看起来很简单,但解释了面向协议编程的所有方面,并且out的重要性将让我围绕它编写完整的博客:)

无论如何,面向协议的编程基本上使你能够利用多重继承,像JAVA这样的面向对象编程语言,Objective-C因为@L_502_1@而不支持

现在然面向协议编程允许您对功能进行建模
/作为一个协议的功能而不是作为类的实例方法(如在Objective C的情况下)我们必须同意我们都喜欢继承!!,记住你曾经用一些操作声明一个方法,然后扩展它写任何特定的to child并仍然使用parent方法中的所有代码只需调用super.methodname ???现在你怎么可能在协议中实现它?你不能重新使用代码

所以Protocols认实现是向类提供认实现的简单方法,它只是想扩展和确认协议,但不打算修改它.

例:假设我有一个打印我的姓氏的协议,如果父类确认它,如果我确认相同的协议,它将打印与我相同的姓氏:)更正其姓氏之后它将不会改变! !

仅仅因为您确认协议,如果协议已经有自己的认实现,则无需提供其方法实现.如果您想要执行除提供的认实现之外的其他操作,您将提供自己的:)

protocol Test {
    func test1()
}

extension Test {
    func test1() {
        print("Yo man")
    }
}

protocol Test2 {
    func test2()
}

extension Test2 {
    func test2() {
        print("Bye man")
    }
}

class ViewController: UIViewController,Test,Test2 {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.test1()
        self.test2()
    }
}

正如您所看到的,我没有为test1或test2提供任何实现,但我使用它就好像它已经为我实现了:)

这是认实施协议的意图.希望能帮助到你

观察:

你有两个协议,Test1和Test2都有相同的方法显示,现在你进入DiamondProblem的基本问题,如果我只是调用display()调用哪个实现? Test1或Test2’s ?? Swift在编译时解决它并告诉你在调用self.display()时模糊地使用display()

它仍然可能在你的代码中工作的唯一原因是因为你创建了两个类型为test1和test2的变量,并且你使用test1.display()和test2.display()调用方法,这些没有歧义,但那不是你怎么样的想用它不是吗?

所以基本上你永远不会陷入与协议的钻石问题:)

@H_801_0@

大佬总结

以上是大佬教程为你收集整理的ios – 我可以在swift中使用协议支持多重继承吗?全部内容,希望文章能够帮你解决ios – 我可以在swift中使用协议支持多重继承吗?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:iosswift使用协议可以多重支持继承
猜你在找的HTML5相关文章
其他相关热搜词更多
phpJavaPython程序员load如何string使用参数jquery开发安装listlinuxiosandroid工具javascriptcap