weak cannot be applied to non-class type '.......'

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了weak cannot be applied to non-class type '.......'相关的知识,希望对你有一定的参考价值。

when defining ‘weak var delegate:.......‘ error
solution:

1.

1 protocol SegueDelegate:NSObjectProtocol{
2     func ......
3 }

2.

1 @objc protocol SegueDelegate{
2     func ......
3 }
Objective-C 和 Swift 在底层使用的是两套完全不同的机制,Cocoa 中的 Objective-C 对象是基于运行时的,它从骨子里遵循了 KVC (Key-Value Coding,通过类似字典的方式存储对象信息) 以及动态派发 (Dynamic Dispatch,在运行调用时再决定实际调用的具体实现)。而 Swift 为了追求性能,如果没有特殊需要的话,是不会在运行时再来决定这些的。也就是说,Swift 类型的成员或者方法在编译时就已经决定,而运行时便不再需要经过一次查找,而可以直接使用。

显而易见,这带来的问题是如果我们要使用 Objective-C 的代码或者特性来调用纯 Swift 的类型时候,我们会因为找不到所需要的这些运行时信息,而导致失败。解决起来也很简单,在 Swift 类型文件中,我们可以将需要暴露给 Objective-C 使用的任何地方 (包括类,属性和方法等) 的声明前面加上 @objc 修饰符。注意这个步骤只需要对那些不是继承自 NSObject 的类型进行,如果你用 Swift 写的 class 是继承自 NSObject 的话,Swift 会默认自动为所有的非 private 的类和成员加上 @objc。这就是说,对一个 NSObject 的子类,你只需要导入相应的头文件就可以在 Objective-C 里使用这个类了。

以上是关于weak cannot be applied to non-class type '.......'的主要内容,如果未能解决你的问题,请参考以下文章

IntelliJ IDEA 15 Play 2.4 反向路由方法参数“string cannot be applied to java.lang.String”

Operator '||' cannot be applied to operands of type 'bool?' and 'bool?'(代码片段

Operator '||' cannot be applied to operands of type 'bool?' and 'bool?'(代码片段

springboot使用日志报错 trace(java.util.function.Supplier<java.lang.String>) in Logger cannot be applied to

springboot使用日志报错 trace(java.util.function.Supplier<java.lang.String>) in Logger cannot be applied to

解决WebDriverWait中的cannot be applied的问题