我有一个键值存储,我想要一个键列表,以便我可以为每个结构分配一个标识符。我可以在 Playground 中执行此操作,但是相同的代码在 Xcode 中不起作用,并产生以下错误:
“属性”不能转换为“<<错误类型”>>
在这行代码上:
for i in keyStore.dictionaryRepresentation.keys { keys.append(i) }
Playground 的完整代码如下:
let keyStore = NSUbiquitousKeyValueStore.default()
keyStore.set("Test", forKey: "test")
var keys : [String] = []
for i in keyStore.dictionaryRepresentation.keys { keys.append(i) }
keyStore.string(forKey: keys.first!)
在 Xcode 中,我有 Attributes 结构:
struct Attribute: KVSAccessor {
var identifier: String {return ""}
var regex: NSRegularExpression
init(kvsIndex: Int) {
var keys: [String] = []
for i in keyStore.dictionaryRepresentation.keys { keys.append(i) }
guard let key = keys[kvsIndex] else { return }
identifier = key
}
}
以下协议:
protocol KVSAccessor {
var keyStore: NSUbiquitousKeyValueStore {get}
func sync()
var identifier: String {get set}
}
而这两个扩展:
extension KVSAccessor where Self: Any { func sync() { NSUbiquitousKeyValueStore.default().synchronize() } }
extension KVSAccessor where Self: Attribute { var keyStore: NSUbiquitousKeyValueStore { return NSUbiquitousKeyValueStore.default() } }
同样,Playground 中的版本完美运行,那么另一个版本有什么问题呢?
编辑1:这是所有代码:
import Foundation
import Cocoa
struct Attribute: KVSAccessor {
var identifier: String {return ""}
var regex: NSRegularExpression
init(kvsIndex: Int) {
var keys: [String] = []
for i in keyStore.dictionaryRepresentation.keys { keys.append(i) }
guard let key = keys[kvsIndex] else { return }
identifier = key
}
}
protocol KVSAccessor {
var keyStore: NSUbiquitousKeyValueStore {get}
func sync()
var identifier: String {get set}
}
extension KVSAccessor where Self: Any { func sync() { NSUbiquitousKeyValueStore.default().synchronize() } }
extension KVSAccessor where Self: Attribute { var keyStore: NSUbiquitousKeyValueStore { return NSUbiquitousKeyValueStore.default() } }