下面的value
声明
import Foundation
class AAA: NSObject {
func test2() {
self.dynamicType
}
}
extension AAA {
static let value = 111
}
导致以下编译错误
A declaration cannot be both 'final' and 'dynamic'
为什么会发生这种情况,我该如何处理?
我使用的是Swift 1.2 ( Xcode 6.3.1 6D1002中附带的版本)
发布于 2015-09-29 04:56:06
之所以会出现这个问题,是因为Swift试图为静态属性生成一个动态访问器,以实现Obj-C兼容性,因为该类继承自NSObject
。
如果你的项目只在Swift中,而不是使用var
访问器,你可以通过Swift 2.0中的@nonobjc
属性来避免这个问题:
import Foundation
class AAA: NSObject {}
extension AAA {
@nonobjc static let value = 111
}
发布于 2015-05-20 22:21:21
我只是由于不同的原因偶然发现了同样的问题,并想在这里将其发布给其他经历相同无用错误消息的人。
覆盖扩展中定义的计算变量的最后一个类也会导致此错误。不过,它适用于函数,因此看起来像是一个编译器错误。
// at line 0: a declaration cannot be both 'final' and 'dynamic'
import UIKit
extension UIViewController {
var test: Int { return 0 }
}
final class TestController: UIViewController {
override var test: Int { return 1 }
}
发布于 2015-09-07 23:43:55
我通过将静态声明移动到我在扩展中定义的新结构中解决了这个问题。
因此,不是这样:
extension NSOperationQueue {
static var parsingQueue : NSOperationQueue = {
let queue = NSOperationQueue()
queue.maxConcurrentOperationCount = 1
return queue
}()
}
我有这个:
extension NSOperationQueue {
struct Shared {
static var parsingQueue : NSOperationQueue = {
let queue = NSOperationQueue()
queue.maxConcurrentOperationCount = 1
return queue
}()
}
}
https://stackoverflow.com/questions/29814706
复制相似问题