2017-04-03 89 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) 
} 

希望這段代碼能幫到你!