相关疑难解决方法(0)

如果在协议扩展中定义静态方法,如何在协议上调用静态方法?

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()的成员).如果在协议扩展中定义静态方法,可以直接在协议上调用静态方法吗?

protocols swift swift2 protocol-extension

9
推荐指数
1
解决办法
3302
查看次数

当泛型类型通过参数传递时,Swift无法推断泛型类型

我正在为核心数据编写通用的包装类.

以下是我的一些基本类型.没什么特别的.

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)

generics protocols core-data associated-types swift

6
推荐指数
1
解决办法
361
查看次数