下面是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访问器,则可以通过Swift 2.0中的@nonobjc属性避免该问题:

import Foundation

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

Swift相关问答推荐

Form中的Divider在macOS上并不完全扩展

.onReceive NSWindow.CloseNotify是否会为App中的每个窗口调用?

当计数大于索引时,索引超出范围崩溃

是否可以将具有关联值的枚举强制转换为其类型与关联值匹配的变量?

如何绑定环境变量ios17

应该在ViewModel还是ViewController中使用"Task {}"?

如何在 Swift 中做类型安全的索引?

避免 `(())` 显式指定 Void 类型的枚举关联值

如何在 swiftui 中设置给定字符串类型日期的日期倒计时?

如何在 UITableView 中点击图片和标题

SwiftUI:当 currentIndex 值更改时,数组中的第 n 个视图是否已换出?

关于变量的视图的 SwiftUI 生命周期

如何在 SwiftUI 中获取视图的位置

在视图中设置所有变量

iOS Swift - 如何更改表格视图的背景 colored颜色 ?

Swift - 获取本地日期和时间

如何在Swift中找出字母是字母数字还是数字

DispatchQueue:不能在非主线程上使用 asCopy = NO 调用

Void 函数中意外的非 Void 返回值 (Swift 2.0)

如何将多个枚举值作为函数参数传递