如何在iOS 8.2中模拟静态属性?

时间:2015-03-16 03:19:13

标签: ios xcode swift

对于自定义类,以下工作正常。但是我收到了我认为特定于NSUserDefaults的错误

class NSUserDefaultsManager:NSObject {
    struct Static {
        static var udefaults = NSUserDefaults.standardUserDefaults()
    }  

    class var udefaults: [NSUserDefaults] {
        get { return Static. udefaults }
        set { Static. udefaults = newValue }
    }
}

get行上,出现此错误:

  

' NSUserDefaults的'与' AnyObject'

不同

set行,我明白了:

  

' NSArray的'不是NSUserDefaults'

的子类型

目标是访问此类NSUserDefaults.udefaults之类的udefaults。我是否需要为NSUserDefaults创建属性单例并像NSUserDefaults.instance()那样访问它.udefaults?

1 个答案:

答案 0 :(得分:-1)

这似乎是不可能的。您要做的是创建NSUserDefaults的扩展。执行此操作的代码如下所示:

extension NSUserDefaults
{
    static let udefaults = NSUserDefaults.standardUserDefaults()
}

然而,Xcode抱怨以下错误消息:

  

扩展程序可能不包含存储的属性。

<强>更新

以下代码编译没有任何语法错误,但它崩溃了Xcode: - )

extension NSUserDefaults
{
    class var shared : NSUserDefaults {
        struct Static {
            static let instance : NSUserDefaults = NSUserDefaults.standardUserDefaults()
        }
        return Static.instance
    }
}


var qq = NSUserDefaults.shared

错误消息是&#34;执行被中断,原因是SIGABRT。&#34;