gpt4 book ai didi

swift - 协议(protocol)间接实现另一个协议(protocol)不止一次

转载 作者:搜寻专家 更新时间:2023-10-31 21:49:02 25 4
gpt4 key购买 nike

我正在做一些测试项目来学习 Swift,但有一个编译问题我无法解决。

我定义了这样一个协议(protocol):

@objc protocol MyDataProvider : UICollectionViewDataSource, UICollectionViewDelegate, NSObjectProtocol {
var myData : AnyObject { get }
}

和一个实现它的类:

class MyData : NSObject, MyDataProvider {
var myData:AnyObject

init() {
self.myData = Int()
}

func collectionView(collectionView: UICollectionView!, numberOfItemsInSection section: Int) -> Int {
return 1
}

func collectionView(collectionView: UICollectionView!, cellForItemAtIndexPath indexPath: NSIndexPath!) -> UICollectionViewCell! {
return nil
}
}

我可以创建该类的实例并通过协议(protocol)变量引用它:

let dataProvider : MyDataProvider = MyData()

接下来,我想在 View Controller 中使用该实例:

class MyController : UIViewController {
let dataProvider : MyDataProvider = MyData()

@IBOutlet var collectionView : UICollectionView

override func viewDidLoad() {
super.viewDidLoad()

self.collectionView.dataSource = dataProvider
self.collectionView.delegate = dataProvider
}
}

编译器将最后 2 个赋值报告为错误,错误消息如下:

Type 'MyDataProvider' does not conform to protocol 'NSObjectProtocol'

如果我不使用接口(interface)并将属性声明为类类型:

let dataProvider = MyDate()

它确实编译。所以 MyDataProvider 协议(protocol)一定有问题,我就是想不通。

如果我删除接口(interface)实现的 2 个委托(delegate)之一,在注释完 viewDidLoad() 中的相应行后,编译仍然失败。但是,如果我从协议(protocol)中删除 NSObjectProtocol:

protocol MyDataProvider : UICollectionViewDelegate {
var myData : AnyObject { get }
}

现在编译成功了。好的,UICollectionViewDelegate 实现了 NSObjectProtocol,所以看起来一个协议(protocol)不能直接或间接地实现另一个协议(protocol)超过一次。但是,如果我从界面中删除 NSObjectProtocol 并保留两个 Collection View 委托(delegate):

protocol MyDataProvider : UICollectionViewDataSource, UICollectionViewDelegate {
var myData : AnyObject { get }
}

编译仍然失败,因为两者都实现了NSObjectProtocol。我该如何解决?

最佳答案

看起来这已经在 beta 3 中修复了。所以我猜这是一个错误。我正要提交雷达,但最后他们比我更快:)

关于swift - 协议(protocol)间接实现另一个协议(protocol)不止一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24573532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com