如何在Swift中将类作为参数传递?

道格·史密斯

我想用以下签名编写一个函数:

func viewHasSuperviewOfClass(view: UIView, superclass: AnyObject.Type) -> Bool {
    return view.superview is superclass
}

但是它不会编译。我究竟做错了什么?如何传递超类并将其视为参数?

瓦瓦瓦玛

通过superclassasAnyClass并用于对其isKind(of:)进行测试:

func viewHasSuperviewOfClass(view: UIView, superclass: AnyClass) -> Bool {
    return view.superview?.isKind(of: superclass) ?? false
}

由于view.superview是可选的,因此需要将其拆开。使用可选的链接将返回nil如果没有上海华盈,所以使用零合并运算符 ??,以回报false,如果没有superview


例子:

let button = UIButton()
let label = UILabel()
label.addSubview(button)

viewHasSuperviewOfClass(view: button, superclass: UILabel.self)  // true
viewHasSuperviewOfClass(view: label, superclass: UIButton.self)  // false

如果您对此进行函数签名,则阅读起来会更好一些:

func view(_ view: UIView, hasSuperviewOfClass superclass: AnyClass) -> Bool {
    return view.superview?.isKind(of: superclass) ?? false
}

// example call
view(button, hasSuperviewOfClass: UILabel.self)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在C ++中将类(不是对象)作为参数传递

来自分类Dev

如何在Admin类中将函数作为参数传递

来自分类Dev

如何在C ++中将类(不是对象)作为参数传递

来自分类Dev

如何在java中将类作为参数传递

来自分类Dev

如何在Swift的方法中将字典作为参数传递?

来自分类Dev

如何在Swift中将协议作为参数传递

来自分类Dev

如何在Java中将泛型列表类作为参数传递给泛型方法?

来自分类Dev

如何在模板类方法中将方法指针作为参数传递

来自分类Dev

如何在Java中将泛型列表类作为参数传递给泛型方法?

来自分类Dev

如何在 selenium 中将输入参数作为测试类名传递?

来自分类Dev

如何在Swift中将具有关联类型的协议(通用协议)作为参数传递?

来自分类Dev

如何在Swift中将选择器函数作为参数传递?

来自分类Dev

如何在Swift中将类型别名作为函数参数传递?

来自分类Dev

如何在Elixir中将函数作为参数传递?

来自分类Dev

如何在Python中将联合/交叉方法作为参数传递?

来自分类Dev

如何在Android中将视图作为参数传递?

来自分类Dev

如何在mapreduce中将文件作为参数传递

来自分类Dev

如何在Javascript中将对象的方法作为参数传递

来自分类Dev

如何在Java中将函数作为参数传递给Callable

来自分类Dev

如何在SQLAlchemy Core中将列名作为参数传递?

来自分类Dev

如何在JSON中将字典作为参数传递

来自分类Dev

如何在Rust中将匿名函数作为参数传递?

来自分类Dev

如何在PowerShell中将DateTime作为参数传递?

来自分类Dev

如何在gdb中将命令的输出作为参数传递?

来自分类Dev

如何在ctypes python中将char指针作为参数传递

来自分类Dev

如何在Vim脚本中将变量作为函数的参数传递

来自分类Dev

如何在C函数中将宏作为参数传递?

来自分类Dev

如何在Python中将函数作为函数参数传递

来自分类Dev

如何在WCF服务中将接口作为参数传递?

Related 相关文章

  1. 1

    如何在C ++中将类(不是对象)作为参数传递

  2. 2

    如何在Admin类中将函数作为参数传递

  3. 3

    如何在C ++中将类(不是对象)作为参数传递

  4. 4

    如何在java中将类作为参数传递

  5. 5

    如何在Swift的方法中将字典作为参数传递?

  6. 6

    如何在Swift中将协议作为参数传递

  7. 7

    如何在Java中将泛型列表类作为参数传递给泛型方法?

  8. 8

    如何在模板类方法中将方法指针作为参数传递

  9. 9

    如何在Java中将泛型列表类作为参数传递给泛型方法?

  10. 10

    如何在 selenium 中将输入参数作为测试类名传递?

  11. 11

    如何在Swift中将具有关联类型的协议(通用协议)作为参数传递?

  12. 12

    如何在Swift中将选择器函数作为参数传递?

  13. 13

    如何在Swift中将类型别名作为函数参数传递?

  14. 14

    如何在Elixir中将函数作为参数传递?

  15. 15

    如何在Python中将联合/交叉方法作为参数传递?

  16. 16

    如何在Android中将视图作为参数传递?

  17. 17

    如何在mapreduce中将文件作为参数传递

  18. 18

    如何在Javascript中将对象的方法作为参数传递

  19. 19

    如何在Java中将函数作为参数传递给Callable

  20. 20

    如何在SQLAlchemy Core中将列名作为参数传递?

  21. 21

    如何在JSON中将字典作为参数传递

  22. 22

    如何在Rust中将匿名函数作为参数传递?

  23. 23

    如何在PowerShell中将DateTime作为参数传递?

  24. 24

    如何在gdb中将命令的输出作为参数传递?

  25. 25

    如何在ctypes python中将char指针作为参数传递

  26. 26

    如何在Vim脚本中将变量作为函数的参数传递

  27. 27

    如何在C函数中将宏作为参数传递?

  28. 28

    如何在Python中将函数作为函数参数传递

  29. 29

    如何在WCF服务中将接口作为参数传递?

热门标签

归档