如何在协议扩展中正确使用“self”以避免必须使用协议存根?

迅捷JD

目前我们有一个协议和一个协议扩展:

protocol Camera: UIImagePickerControllerDelegate, UINavigationControllerDelegate {

  func openTheCamera()
}

extension Camera where Self: UIImagePickerController {
    func openTheCamera() {
        if UIImagePickerController.isSourceTypeAvailable(.camera) {
            let imagePicker = UIImagePickerController()
            imagePicker.delegate = self
            imagePicker.sourceType = .camera
            imagePicker.allowsEditing = false
            self.present(imagePicker, animated: true, completion: nil)
        }
    }
}

由于该函数已在协议扩展中定义,因此我尝试在符合标准的类中直接调用它:

class SomeClass: Camera {

 override func viewDidLoad() {
        super.viewDidLoad()
        openTheCamera()
    }
}

问题是当我尝试符合类时,我收到错误:

类型 UIViewController 不符合协议 'Camera' 你想添加协议存根吗?

问题是 func 已经在扩展中定义了,我不想再次将它添加到控制器中。如果我添加协议存根 (openTheCamera(){ }) 并在控制器中留空,那么我在协议扩展中定义的函数不会被执行。

克里斯托夫·马捷伊

协议条件是错误的。你应该使用:

extension Camera where Self: UIViewController {

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在协议扩展中使用#selector(myMethodName)?

来自分类Dev

如何在Python中正确实现映射协议?

来自分类Dev

如何使用associatedtype和array扩展协议

来自分类Dev

如何使用associatedtype和array扩展协议

来自分类Dev

在协议中使用 self in function

来自分类Dev

如何在Swift中对SKPSMTPMessageDelegate使用协议?

来自分类Dev

如何在Qt上使用TLS协议?

来自分类Dev

如何在Swift中对SKPSMTPMessageDelegate使用协议?

来自分类Dev

如何使用Memcache协议

来自分类Dev

如何在Swift中使用扩展协议在Obj-C类上公开现有属性

来自分类Dev

如何使用类型约束调用协议扩展默认实现

来自分类Dev

如何使用协议和 where 子句扩展 CollectionType?

来自分类Dev

如何在协议扩展中设置委托

来自分类Dev

如何在Swift中扩展协议

来自分类Dev

如何正确使用协议来调用GameViewController的函数?

来自分类Dev

IOS开发中的协议,扩展名和类别之间有什么区别?以及如何正确使用它们?

来自分类Dev

如何在 SignalR Core 中正确使用 EFCore(避免缓存实体)

来自分类Dev

如何在 C++ 中正确使用 ifstreams,带有子进程并避免泄漏?

来自分类Dev

快速使用协议扩展默认值

来自分类Dev

如何使用子类遵守协议

来自分类Dev

如何在Swift中使用具有相同协议变量的多个协议?

来自分类Dev

如何在C中正确使用malloc?

来自分类Dev

如何在列表中正确使用Observable?

来自分类Dev

如何在GinMapBinder中正确使用TypeLiteral?

来自分类Dev

如何在Qt中正确使用AdjustSize()

来自分类Dev

如何在MySQL中正确使用索引

来自分类Dev

如何在SUMPRODUCT函数中正确使用OR

来自分类Dev

如何在EAR中正确使用OmniFaces

来自分类Dev

如何在Spring中正确使用@Async

Related 相关文章

  1. 1

    如何在协议扩展中使用#selector(myMethodName)?

  2. 2

    如何在Python中正确实现映射协议?

  3. 3

    如何使用associatedtype和array扩展协议

  4. 4

    如何使用associatedtype和array扩展协议

  5. 5

    在协议中使用 self in function

  6. 6

    如何在Swift中对SKPSMTPMessageDelegate使用协议?

  7. 7

    如何在Qt上使用TLS协议?

  8. 8

    如何在Swift中对SKPSMTPMessageDelegate使用协议?

  9. 9

    如何使用Memcache协议

  10. 10

    如何在Swift中使用扩展协议在Obj-C类上公开现有属性

  11. 11

    如何使用类型约束调用协议扩展默认实现

  12. 12

    如何使用协议和 where 子句扩展 CollectionType?

  13. 13

    如何在协议扩展中设置委托

  14. 14

    如何在Swift中扩展协议

  15. 15

    如何正确使用协议来调用GameViewController的函数?

  16. 16

    IOS开发中的协议,扩展名和类别之间有什么区别?以及如何正确使用它们?

  17. 17

    如何在 SignalR Core 中正确使用 EFCore(避免缓存实体)

  18. 18

    如何在 C++ 中正确使用 ifstreams,带有子进程并避免泄漏?

  19. 19

    快速使用协议扩展默认值

  20. 20

    如何使用子类遵守协议

  21. 21

    如何在Swift中使用具有相同协议变量的多个协议?

  22. 22

    如何在C中正确使用malloc?

  23. 23

    如何在列表中正确使用Observable?

  24. 24

    如何在GinMapBinder中正确使用TypeLiteral?

  25. 25

    如何在Qt中正确使用AdjustSize()

  26. 26

    如何在MySQL中正确使用索引

  27. 27

    如何在SUMPRODUCT函数中正确使用OR

  28. 28

    如何在EAR中正确使用OmniFaces

  29. 29

    如何在Spring中正确使用@Async

热门标签

归档