我尝试在我的 swift 实现中使用以下委托(delegate)(见下文),但失败了 “不符合协议(protocol)......”和错误消息,如“候选人具有不匹配的类型(PieChartView) -> Int” 有什么想法吗?
@protocol PieChartViewDataSource <NSObject>
@required
- (int)numberOfSlicesInPieChartView:(PieChartView *)pieChartView;
- (double)pieChartView:(PieChartView *)pieChartView valueForSliceAtIndex:(NSUInteger)index;
- (UIColor *)pieChartView:(PieChartView *)pieChartView colorForSliceAtIndex:(NSUInteger)index;
失败的 Swift 实现
func numberOfSlicesInPieChartView(pieChartView: PieChartView) -> Int {
return 3
}
func pieChartView(pieChartView: PieChartView, colorForSliceAtIndex index: Int) -> UIColor? {
return UIColor(rgba: "#FF0000")
}
func pieChartView(pieChartView: PieChartView, valueForSliceAtIndex index: Int) -> Double {
return 100/3;
}
最佳答案
func numberOfSlicesInPieChartView(pieChartView: PieChartView) -> CInt {
return 32
}
func pieChartView(pieChartView: PieChartView, colorForSliceAtIndex index: UInt) -> UIColor {
return UIColor(red: 1.0, green: 0, blue: 0, alpha: 1)
}
func pieChartView(pieChartView: PieChartView, valueForSliceAtIndex index: UInt) -> Double {
return 100/3;
}
使用 -> CInt
而不是 Int
因为 Swift Int
无法转换为 C int
。与 Double
相同 -> CDouble
使用 index: UInt
而不是 index: Int
,因为 NSUInteger
是 unsigned。
关于Swift:候选人的类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26419930/