是否可以创建可以将UIView或UIButton用作参数的泛型函数?

时间:2019-12-21 15:22:43

标签: ios swift generics

我正在尝试创建一个具有通用T参数的通用函数,但我希望它既可用于UIView也可用于UIButton。我不确定这是否可行。像这样:

 func changeUIColor<T>(item: T) {
        item.backgroundColor = UIColor.red
    }

但是我总是收到错误消息:

  

类型'T'的值没有成员'backgroundColor'

有关如何使其正常工作的任何线索?

1 个答案:

答案 0 :(得分:1)

这是不必要的,因为UIButton继承自UIView,因此按钮是视图。如果您要编写它,则外观将如下所示,因为UIView和UIButton都是UIViews(它们也都继承了NSObject和UIResponder,所以它们中的任何一个也可以工作):

func someFunc<View: UIView>(someView: View) {}

在这种情况下,由于一致性是一个类而不是协议,因此您可以使用多态性代替泛型,然后编写:

func someFunc(someView: UIView)

它仍然需要一个UIButton。