protocol Car {
static func foo()
}
struct Truck : Car {
}
extension Car {
static func foo() {
print("bar")
}
}
Car.foo() // Does not work
// Error: Car does not have a member named foo
Truck.foo() // Works
Run Code Online (Sandbox Code Playgroud)
Xcode Car.foo()正确地自动填充,所以我要问的是它是否是一个不能编译的错误(说它没有一个名为foo()的成员).如果在协议扩展中定义静态方法,可以直接在协议上调用静态方法吗?
我正在为核心数据编写通用的包装类.
以下是我的一些基本类型.没什么特别的.
typealias CoreDataSuccessLoad = (_: NSManagedObject) -> Void
typealias CoreDataFailureLoad = (_: CoreDataResponseError?) -> Void
typealias ID = String
enum CoreDataResult<Value> {
case success(Value)
case failure(Error)
}
enum CoreDataResponseError : Error {
typealias Minute = Int
typealias Key = String
case idDoesNotExist
case keyDoesNotExist(key: Key)
case fetch(entityName: String)
}
Run Code Online (Sandbox Code Playgroud)
我已经在协议中抽象了我的coredata写入.如果你让我知道你对我试图完成的抽象的评论,我将不胜感激.然而在扩展中我遇到了以下错误:
无法将'NSFetchRequest'类型的值转换为预期的参数类型'NSFetchRequest <_>'
不知道我究竟如何解决它.我尝试过更改代码的变体,但没有找到成功......
protocol CoreDataWriteManagerProtocol {
associatedtype ManagedObject : NSManagedObject
var persistentContainer : NSPersistentContainer {get}
var idName : String {get}
func loadFromDB(storableClass : ManagedObject.Type, id: ID) throws -> CoreDataResult<ManagedObject> …Run Code Online (Sandbox Code Playgroud)