首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Swift 1.2中,声明不能同时是'final‘和'dynamic’错误

在Swift 1.2中,声明不能同时是'final‘和'dynamic’错误
EN

Stack Overflow用户
提问于 2015-04-23 13:46:25
回答 5查看 14.7K关注 0票数 123

下面的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中附带的版本)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 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
}
票数 224
EN

Stack Overflow用户

发布于 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 }
}
票数 7
EN

Stack Overflow用户

发布于 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                
            }()
    }
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29814706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档