0

キー値ストアがあり、各構造体に識別子を割り当てることができるようにキーのリストが必要です。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 があります。

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}
}

そして、これらの 2 つの拡張子:

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() } }
4

0 に答える 0