相关疑难解决方法(0)

议定书不符合自己的要求?

为什么这个Swift代码没有编译?

protocol P { }
struct S: P { }

let arr:[P] = [ S() ]

extension Array where Element : P {
    func test<T>() -> [T] {
        return []
    }
}

let result : [S] = arr.test()
Run Code Online (Sandbox Code Playgroud)

编译器说:"类型P不符合协议P"(或者,在Swift的更高版本中,"不支持使用'P'作为符合协议'P'的具体类型.").

为什么不?不知怎的,这感觉就像语言中的漏洞.我意识到问题源于将数组声明arr协议类型的数组,但这是不合理的事情吗?我认为协议正是为了帮助提供类似层次结构的结构?

generics swift swift-protocols

117
推荐指数
3
解决办法
1万
查看次数

Swift协议需要属性作为协议

我正在尝试定义一个协议“存储库”,它需要定义几个属性(实现一个特定的协议“ DataSource”)

但是由于我的真实场景的复杂性,所以其中一个属性必须是“ DataSource”的子协议。

我将问题简化为以下简单代码:

protocol DataSource { }

protocol ExtraDataSouce: DataSource {
    func method1() -> String
}

struct MyDataSource: ExtraDataSouce {
    func method1() -> String {
        return "whatever"
    }
}


protocol Repository {
    var firstDataSource: DataSource { get }
    var secondDataSource: DataSource { get }
}

struct MyRepository: Repository {
    var firstDataSource: DataSource
    var secondDataSource: MyDataSource
}
Run Code Online (Sandbox Code Playgroud)

由于“ MyRepository”不符合“ Repository”,在编译时返回错误。但是我认为它确实可以...关于为什么它不接受定义为“ MyDataSource”的“ MyRepository”中的“ secondDataSource”的任何想法?

protocols swift

5
推荐指数
1
解决办法
1684
查看次数

Swift:如何使Subclass返回类型的函数符合协议,其中Superclass被定义为返回类型?

我有一个协议,其中定义了一个函数,函数的返回类型是a SuperclassType.

在符合协议的类中,我试图定义此函数,但具有SubclassType返回类型.

编译器告诉我,这个类不符合协议,因为很明显SubclassType!=SuperclassType

protocol SomeProtocol {
  func someFunction(someParameter:SomeType) -> SuperclassType?
}

class SomeClass : SomeProtocol {
  func someFunction(someParameter:SomeType) -> SubclassType? {
    ...
  }
}

class SubclassType : SuperclassType { }
Run Code Online (Sandbox Code Playgroud)

但是,常识告诉我,这SubclassType应该是一个合适的替代品SuperclassType.

我究竟做错了什么?

谢谢.

oop protocols swift

4
推荐指数
1
解决办法
826
查看次数

标签 统计

swift ×3

protocols ×2

generics ×1

oop ×1

swift-protocols ×1