1

我想为集合中的对象建立绑定,以便可以像引用指针一样将其传递给下游。我希望这是一个方便的功能,但我遇到了一些麻烦。

如果有的话,我可以使用以下协议“Diskable”来消除我遇到的错误吗?

final class PropertiesData: ObservableObject, Diskable {
    
    @Published var fetchedItems: [Property] = []
        
    var location: URL {
        let file = try! LocalStorage.rootFolder.createFileIfNeeded(withName: "properties.data")
        return file.url
    }
}

extension Diskable where T: Identifiable {
    
    func binding(for object: T) -> Binding<T> {
        let index = fetchedItems.firstIndex(where: { $0.id == object.id } )!
        return $fetchedItems[index] // cannot find 'fetchedItems' in scope
    }
}

protocol Diskable: AnyObject {
    associatedtype T: Codable
    var location: URL { get }
    var fetchedItems: [T] { get set }
}
4

1 回答 1

1

据我可以在这里复制您的代码是一个解决方案(使用 Xcode 12.1 / iOS 14.1 测试)

extension Diskable where T: Identifiable {
    func binding(for object: T) -> Binding<T> {
        let index = fetchedItems.firstIndex(where: { $0.id == object.id } )!
        return Binding(
            get: { self.fetchedItems[index] },
            set: { self.fetchedItems[index] = $0 }
        )
    }
}
于 2020-12-26T12:25:37.670 回答