相关疑难解决方法(0)

不支持使用某些协议作为符合其他协议的具体类型

我正在尝试将泛型与协议混合在一起,我的xD非常困难

我在Android/Java项目中实现了某些架构,我正在尝试重写它以适应swift/iOS项目.但我发现了这个限制.

ProtocolA

protocol ProtocolA {

}
Run Code Online (Sandbox Code Playgroud)

ProtocolB

protocol ProtocolB : ProtocolA {

}
Run Code Online (Sandbox Code Playgroud)

ImplementProtocolA

class ImplementProtocolA <P : ProtocolA> {

    let currentProtocol : P

    init(currentProtocol : P) {
        self.currentProtocol = currentProtocol
    }

}
Run Code Online (Sandbox Code Playgroud)

ImplementProtocolB

class ImplementProtocolB : ImplementProtocolA<ProtocolB> {

}
Run Code Online (Sandbox Code Playgroud)

因此,当我尝试将ProtocolB设置为实现ProtocolA的具体类型时,我收到此错误:

不支持使用'ProtocolB'作为符合协议'ProtocolA'的具体类型

1这种"限制"有什么理由吗?

2是否有任何解决方法可以实现此功能?

3它会在某个时候得到支持吗?

- 更新 -

我认为同一问题的另一个变种是:

查看协议

protocol View {

}

protocol GetUserView : View {
    func showProgress()
    func hideProgress()
    func showError(message:String)
    func showUser(userDemo:UserDemo)
}
Run Code Online (Sandbox Code Playgroud)

演示者协议

protocol Presenter {
    typealias V : …
Run Code Online (Sandbox Code Playgroud)

protocols swift

64
推荐指数
1
解决办法
2万
查看次数

使用故事板的swift 2.0中的通用控制器

我试图为我的应用程序创建一个GenericListController.

我有一个ProductListController,它扩展了这个扩展UIViewController的通用控制器.我已将ProductListController连接到故事板并制作了2个插座,但我总是收到此错误:

 Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIViewController 0x7c158ca0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key searchBar.'
Run Code Online (Sandbox Code Playgroud)

我收到这个错误的所有我的网点,如果我从GenericListController删除通用T它的工作原理.我猜一个故事板不能用泛型加载超级.我怎样才能使它工作?

我的代码:

class GenericListController<T> : UIViewController {

    var list : [T] = [T]()
    var filteredlist : [T] = [T]()

    func getData(tableView : UITableView) {
    .....
    }

    func setData(list : [T], tableView : UITableView) {
    .....
    }

    override func viewDidLoad() {
       super.viewDidLoad()
      }
} 

class ProductListController : GenericListController<ProductModel> {
       @IBOutlet weak var searchBar: UISearchBar!
       @IBOutlet weak var …
Run Code Online (Sandbox Code Playgroud)

generics storyboard ios swift swift2

24
推荐指数
2
解决办法
6160
查看次数

Xcode 7 Swift 2无法实例化通用UITableViewController的UIViewController子类

我有一个通用类:

class PaginatedTableViewController
  <GenericElement, Source: PaginationDataSource 
     where Source.PaginatedGenericElement == GenericElement>:
  UITableViewController
Run Code Online (Sandbox Code Playgroud)

另一个我试图从故事板中实例化:

class CandidatesTableViewController: 
   PaginatedTableViewController<Match, MatchPaginationDataSource>
Run Code Online (Sandbox Code Playgroud)

CandidatesTableViewController在故事板Custom Class下拉菜单中找不到.如果我强制它然后在代码中转换我的控制器,应用程序在运行时崩溃抱怨我的控制器(应该是CandidatesTableViewController实例)实际上是一个UITableViewController实例.

Interface Builder文件中的未知类_TtC21MyProjectName29CandidatesTableViewController.无法将'UITableViewController'类型的值(0x1040917f8)转换为'MyProjectName.CandidatesTableViewController'(0x1013a9890).

在我的项目中,这个控制器嵌入另一个控制器,这就是我投射它的原因:

tableViewController = (segue.destinationViewController as! CandidatesTableViewController)
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决这个问题?

generics ios swift swift2

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

标签 统计

swift ×3

generics ×2

ios ×2

swift2 ×2

protocols ×1

storyboard ×1