1. ホーム
  2. swift

[解決済み] Swift 1.2では、宣言は「final」と「dynamic」の両方にはなり得ないというエラーがある

2022-08-25 11:22:01

質問

の宣言は 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に同梱されているバージョン)を使用しています。

どのように解決するのですか?

この問題は Swift が Obj-C 互換性のために静的なプロパティの動的なアクセサを生成しようとしているために発生します。 NSObject .

プロジェクトがSwiftのみである場合、むしろ var アクセサを使用するのではなく、この問題を回避するために @nonobjc 属性で回避できます。

import Foundation

class AAA: NSObject {}
extension AAA {
    @nonobjc static let value = 111
}