2014-07-27 35 views
3

我是新的迅速,我需要一些帮助,以整合 组件AKPickerView(写在Objective C中)。组件的 链接:https://github.com/Akkyie/AKPickerView整合目标C协议与斯威夫特

但我没有成功,因为有一个协议:AKPickerViewDelegate不斯威夫特工作:

@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 

在斯威夫特我写了这个代码:

class ViewController: UIViewController, AKPickerViewDelegate { 

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

... 

我implimented这个方法:

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' 

欣赏一些帮助 谢谢!

+0

看来你的重写方法中的参数可能不完全符合协议。当你期待'NSUInteger'(坏)时,你会返回'Int',但是在提供'NSInteger'(good)的地方接受'NSInteger'。所以这里有一点差异。你可以尝试返回'NSUInteger'或'UInt'吗? –

+0

是@CraigOtis!你是对的!这是我的错误!感谢帮助! – Weles

回答

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 

所以迅速,你需要如下实施them.Implement这些方法,它会删除错误

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

    return self.titles.count 
} 

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

    return self.titles[item] 
} 

注意你还需要添加它们在桥接Header.Just写#import "AKPickerView.h"Swifter-Bridging-Header.h

+0

嗨Codeter!感谢您的帮助!区别在于NSString和String以及Int和UInt。 – Weles

+0

是@Weles swift是强类型语言,因此不会隐式转换为其他类型 – codester

相关问题