在swift-ObjC中访问扩展中的静态变量

时间:2016-04-19 12:11:39

标签: ios objective-c xcode swift

嗨我有NSUserDefaults的扩展程序,我需要使用Obj-C访问它。

扩展中的结构

public struct UserDefaultsEntry {
    let key: String

    func get() -> AnyObject? {
        return NSUserDefaults.standardUserDefaults().objectForKey(key)
    }

    func set(value: AnyObject) {
        switch value {
        case is Bool:
            NSUserDefaults.standardUserDefaults().setBool(value as! Bool, forKey: key)
            break
        case is String:
            NSUserDefaults.standardUserDefaults().setObject(value as! String, forKey: key)
            break
        case is NSData:
            NSUserDefaults.standardUserDefaults().setObject(value as! NSData, forKey: key)
            break
        default:
            break
        }
    }

    func remove() {
        NSUserDefaults.standardUserDefaults().removeObjectForKey(key)
    }
}

相同扩展程序类中的静态变量

public static let testDefault = UserDefaultsEntry(key: "testDefault")

所以我可以通过使用

在swift类中正常调用它
let string = "test"
NSUserDefaults.testDefault.set(string)

但未能在Obj-C类中调用它。那我该怎么称呼呢?提前致谢

编辑: 试图使用

[NSUserDefaults.testDefault get];

但我正在

  

Property' testDefault'没有找到对象类型' NSUserDefaults'

1 个答案:

答案 0 :(得分:2)

Objective-C中没有结构。要使Swift中的代码在Objective-C中可用,它必须是子类NSObject的类。 testDefault是一个结构,因此,Objective-C无法看到它。