Я хочу иметь функцию в swift, которая принимает два параметра, которые должны иметь некоторый базовый класс, и каждый сталкивается с другим протоколом.Несколько общих параметров в Swift
class func createContainerViewController<T:UIViewController, U:UIViewController>(withCenterViewController centerViewController: T, andLeftViewController leftViewController: U) -> ContainerViewController where T: CenterViewController, U: SidePanelViewController
Но всякий раз, когда я пытаюсь использовать метод как это:
let left: SidePanelViewController = UIStoryboard.leftViewController()!
let center: EventsListViewController = UIStoryboard.eventsListViewController()!
let containerViewController = ContainerViewController.createContainerViewController(withCenterViewController: center, andLeftViewController: left)
Xcode дает мне ошибку
Общий параметр 'T' не может быть выведено
Обе переменные центра и слева являются экземплярами классов, которые наследуются от UIViewController и противостоит до нужного протокола для T или U.
Использование в функции createContainerViewController:
let container = ContainerViewController()
container.centerViewController = centerViewController
var centerViewController = container.centerViewController as! CenterViewController
centerViewController.delegate = container
container.leftViewController = leftViewController
var leftViewController = container.leftViewController as! SidePanelViewController
leftViewController.delegate = container
return container
Ваши две строки кода в порядке до тех пор, как '' CenterViewController' и SIdePanelViewController' оба подклассы 'UIViewController'. Как вы используете 'T' и' U' в теле функции? (Кроме того, попробуйте в XCode 8 с быстрым 3, если вы еще этого не сделали) – DavidA
Я использую Xcode 8 и Swift 3. И в центре и влево находятся оба подкласса UIViewController и реализующие правильные протоколы ... – Radek
Добавлено использование в func , – Radek