Weles
Weles

Reputation: 1275

Integration Objective C Protocols with Swift

I am new in swift and i need some help to integrate a component AKPickerView (written in Objective C). link of component: https://github.com/Akkyie/AKPickerView

But i have no success, because there is a protocol: AKPickerViewDelegate that don't work in 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

In Swift i wrote this code:

class ViewController: UIViewController, AKPickerViewDelegate {

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

...

And I implimented this methods:

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

    return self.titles.count
}


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

    return self.titles[item] as NSString
}

But the compiler show this error:

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

Appreciate some help Thanks!

Upvotes: 4

Views: 758

Answers (1)

codester
codester

Reputation: 37189

As i have seen in link AKPickerViewDelegate has required method.

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

So in swift you need to implement them.Implement these methods as below and it will remove the error

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

    return self.titles.count
}

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

   return self.titles[item]
}

Note you also need to add them in Bridging Header.Just write this #import "AKPickerView.h" in Swifter-Bridging-Header.h

Upvotes: 3

Related Questions