2016-06-06 4 views
2

Можно ли сделать struct и/или typealias соответствовать @objc? Я хочу создать дополнительные функции протокола, один возвращает struct, а другой - typealias.Как сделать структуру и титалии соответствовать @objc

public typealias SwiperData = (image: UIImage, title: String) 

public struct SwiperPeekViewControllers{ 
    public var parentViewController: UIViewController! 
    public var contentViewController: UIViewController! 
    public init(parentVC: UIViewController, contentVC: UIViewController){ 
    parentViewController = parentVC 
    contentViewController = contentVC 
    } 
} 

протокол

@objc public protocol SwiperPeekViewDelegate: class{ 
     func didUndoAction(index: Int, dataSource: SwiperData) 
// Method cannot be a member of an @objc protocol because the type of the parameter 2 cannot be represented in Objective-C 
     func swiperPeekViewControllers()->SwiperPeekViewControllers 
     func swiperPeekViewSize()->CGSize 
    } 
+2

Срочной структуры является типом значения, и не может быть совместим с Objective-C объект, который является ссылочным типом. – gnasher729

+1

См. [Совместимость типов Swift] (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithObjective-CAPIs.html#//apple_ref/doc/uid/TP40014216-CH4-ID53) в руководстве _Using Swift с руководством Cocoa и Objective-C_, что исключает использование некоторых конструкций Swift из Objective-C, включая «Структуры, определенные в Swift», «Typealiases, определенные в Swift» и «Tuples». – Rob

+0

Спасибо за ссылку @Rob – kye

ответ

1

Вы не можете экспортировать typealiases в Objective-C. И вы не можете сделать это для кортежей. Но, о typealias, это все-таки можно написать Obj-C typedef для некоторой структуры и использовать его из Swift, она будет экспортироваться как typealias