gpt4 book ai didi

ios - 如何在函数参数中指定协议(protocol)?

转载 作者:行者123 更新时间:2023-11-29 01:10:10 26 4
gpt4 key购买 nike

我正在编写一个工厂类,尝试使用自定义协议(protocol)定义的函数。编译器抛出错误,因为我不知道如何将协议(protocol)定义添加到函数参数中。

示例:

protocol MyCustomFunctions {
func customFunction()
}

class MyVC: UIViewController, MyCustomFunctions {
func customFunction() {}
}

class Factory {

func createButton(specificVC: UIViewController) // need protocol here
{
specificVC.customFunction() // error thrown
}
}

如何在变量定义期间指定协议(protocol)?

或者有别的办法吗?

最佳答案

首先,惯例说类(class)以大写字母开头。

class MyVC: UIViewController, MyCustomFunctions {
func customFunction() {}
}

那么你需要的是参数中的正确类型

class factory: NSObject {

func createButton(specificVC: MyVC) // you need a class that conforms to protocol here.
{
specificVC.customFunction() // no error anymore
}
}

您还有另一种选择。您可以在参数中简单地 promise 您不会公开对象的完整类型,您只会说它是一个符合协议(protocol)的不透明对象。

class factory: NSObject {

func createButton(specificVC: MyCustomFunctions) // you need a class that conforms to protocol here.
{
specificVC.customFunction() // no error anymore
}
}

奖励:

您可以对此进行推理并找到答案的方式是这样的>

当我调用 specificVC.customFunction() 时抛出错误...嗯...所以这个对象只能运行这个函数,如果它是实际具有函数的类型。那么我们来看看参数类型——UIViewController——..UIViewController肯定没有这个功能。它是 MyVC 或协议(protocol)。

Swift 中的类型安全非常严格。只要“遵循类型流”,你就会做得很好。

关于ios - 如何在函数参数中指定协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35856502/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com