2017-04-03 84 views
1

如何这个代码转换为雨燕转换的typedef斯威夫特

typedef UIViewController<CalendarViewControllerNavigation> CalendarViewController; 

试图到处找解决办法,但似乎我无法找到它的一个引用。

+1

你使用'typealias'标签来处理你的问题。所以你似乎已经知道答案。 – rmaddy

+0

Swift目前不支持表达从类继承而来的类型,并且符合给定的协议 - 但[它将在未来版本的语言中](https://github.com/apple/swift-evolution /blob/master/proposals/0156-subclass-existentials.md)。 – Hamish

+0

你有什么其他方式可以做到这一点吗?也许创建扩展UIViewController按协议的类型到该扩展? – Thanh

回答

1

在斯威夫特4您可以使用:

typealias CalendarViewController = UIViewController & CalendarViewControllerNavigation 

它采用新protocol composition type。 另请参阅SE-156

0

我面临同样的问题使用日历库从https://github.com/jumartin/Calendar

我已经解决了这个问题,如下所示。

protocol CalendarViewControllerNavigation: NSObjectProtocol { 
    func move(to date: Date, animated: Bool) 
} 

typealias CalendarTypeController = UIViewController 

extension CalendarTypeController:CalendarViewControllerNavigation{ 
    internal func move(to date: Date, animated: Bool) { 
    } 
    internal func deviceIsRotated() { 
    } 
    internal func selectedEventForAddSession(event:EventDetail) { 
    } 
} 


protocol CalenderViewControllerDelegate : NSObjectProtocol { 
    func calendarViewController(_ controller:CalendarTypeController, showDate:NSDate) 
} 

希望这段代码能帮到你!