将Objective-C协议与Swift集成

4

我是初学Swift的人,需要帮助将一个Objective-C编写的组件AKPickerView集成到我的项目中。

组件链接:https://github.com/Akkyie/AKPickerView

但我一直无法成功,因为有一个名为AKPickerViewDelegate的协议在Swift中无法正常工作。

@class AKPickerView;

@protocol AKPickerViewDelegate <NSObject>
@optional
- (NSString *)pickerView:(AKPickerView *)pickerView titleForItem:(NSInteger)item;
- (NSUInteger)numberOfItemsInPickerView:(AKPickerView *)pickerView;
- (void)pickerView:(AKPickerView *)pickerView didSelectItem:(NSInteger)item;
@end

我用Swift编写了以下代码:

class ViewController: UIViewController, AKPickerViewDelegate {

var pickerView : AKPickerView = AKPickerView()
var titles     : NSArray = ["Janeiro","Fevereiro","Março","Abril","Maio"]

...

我实现了以下方法:

func numberOfItemsInPickerView(pickerView : AKPickerView!) -> Int{

    return self.titles.count
}


func pickerView(pickerView: AKPickerView, titleForItem item : NSInteger) -> NSString {

    return self.titles[item] as NSString
}

但编译器显示了以下错误:

Type 'ViewController' does not conform to protocol 'AKPickerViewDelegate'

感谢您的帮助。 谢谢!

在你重载的方法中,参数似乎与协议不太匹配。它期望 NSUInteger,但你返回 Int(不好),而接受的位置提供了 NSInteger(很好)。因此存在一些差异。你可以尝试返回 NSUInteger 或者 UInt 吗? - Craig Otis
是的,@CraigOtis!你是正确的!这是我的错误!感谢你的帮助! - Weles
1个回答

3

我在链接中看到AKPickerViewDelegate有一个必须实现的方法。

@protocol AKPickerViewDelegate <NSObject>
@required
- (NSUInteger)numberOfItemsInPickerView:(AKPickerView *)pickerView;
- (NSString *)pickerView:(AKPickerView *)pickerView titleForItem:(NSInteger)item;
@optional
- (void)pickerView:(AKPickerView *)pickerView didSelectItem:(NSInteger)item;
@end

在Swift中,你需要实现它们。按照以下方式实现这些方法,即可解决错误。

func numberOfItemsInPickerView(pickerView: AKPickerView!) -> UInt {

    return self.titles.count
}

func pickerView(pickerView: AKPickerView!, titleForItem item: Int) -> String! {

   return self.titles[item]
}

请注意,您还需要将它们添加到Bridging Header中。只需在Swifter-Bridging-Header.h文件中写入#import "AKPickerView.h"即可。

嗨,Codester!感谢你的帮助!区别在于NSString和String以及Int和UInt。 - Weles
是的,@Weles,Swift 是一种强类型语言,因此不会隐式转换为其他类型。 - codester

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接