如何把这个目标c traitCollection翻译成swift?

我正在尝试从这个链接的目标C中翻译此代码, 为iPad肖像和风景模式的大小类

这是我想要翻译的代码:

@interface RDTraitCollectionOverrideViewController : UIViewController { BOOL _willTransitionToPortrait; UITraitCollection *_traitCollection_CompactRegular; UITraitCollection *_traitCollection_AnyAny; } @end @implementation RDTraitCollectionOverrideViewController - (void)viewDidLoad { [super viewDidLoad]; [self setUpReferenceSizeClasses]; } - (void)setUpReferenceSizeClasses { UITraitCollection *traitCollection_hCompact = [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassCompact]; UITraitCollection *traitCollection_vRegular = [UITraitCollection traitCollectionWithVerticalSizeClass:UIUserInterfaceSizeClassRegular]; _traitCollection_CompactRegular = [UITraitCollection traitCollectionWithTraitsFromCollections:@[traitCollection_hCompact, traitCollection_vRegular]]; UITraitCollection *traitCollection_hAny = [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassUnspecified]; UITraitCollection *traitCollection_vAny = [UITraitCollection traitCollectionWithVerticalSizeClass:UIUserInterfaceSizeClassUnspecified]; _traitCollection_AnyAny = [UITraitCollection traitCollectionWithTraitsFromCollections:@[traitCollection_hAny, traitCollection_vAny]]; } -(void)viewWillAppear:(BOOL)animated { _willTransitionToPortrait = self.view.frame.size.height > self.view.frame.size.width; } - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { _willTransitionToPortrait = size.height > size.width; } -(UITraitCollection *)overrideTraitCollectionForChildViewController:(UIViewController *)childViewController { UITraitCollection *traitCollectionForOverride = (_willTransitionToPortrait) ? _traitCollection_CompactRegular : _traitCollection_AnyAny; return traitCollectionForOverride; } @end 

下面是我所拥有的,请记住,我只是在类声明下重命名了一些初始variables:

 import UIKit class ViewController: UIViewController { var willTransitionToPortrait:Bool = false var compactRegular = UITraitCollection() var anyAny = UITraitCollection() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. setUpReferenceSizeClasses() } func setUpReferenceSizeClasses() { var traitCollection_hCompact = UITraitCollection(horizontalSizeClass: UIUserInterfaceSizeClass.Compact) var traitCollection_vRegular = UITraitCollection(verticalSizeClass: UIUserInterfaceSizeClass.Regular) compactRegular = UITraitCollection(traitsFromCollections: [traitCollection_hCompact, traitCollection_vRegular]) var traitCollection_hAny = UITraitCollection(horizontalSizeClass: UIUserInterfaceSizeClass.Unspecified) var traitCollection_vAny = UITraitCollection(verticalSizeClass: UIUserInterfaceSizeClass.Unspecified) anyAny = UITraitCollection(traitsFromCollections: [traitCollection_hAny, traitCollection_vAny]) } override func viewWillAppear(animated: Bool) { willTransitionToPortrait = self.view.frame.size.height > self.view.frame.size.width } override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) { willTransitionToPortrait = size.height > size.width } func overrideTraitCollectionForChildViewController(UIViewController) -> childViewController { var traitCollectionForOverride = (willTransitionToPortrait) ? compactRegular : anyAny return traitCollectionForOverride; } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } 

}

我想我几乎全都是这样,但是最后一个function我不知道它是什么意思。 任何帮助将非常感激。

我认为你在最后一个函数中缺less“覆盖”,尝试用下面的代码replace:

 override func overrideTraitCollectionForChildViewController(childViewController: UIViewController) -> UITraitCollection! { // } 

这里是完整的代码:

 import UIKit class ViewController: UIViewController { var willTransitionToPortrait:Bool = false var compactRegular = UITraitCollection() var anyAny = UITraitCollection() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. setUpReferenceSizeClasses() } func setUpReferenceSizeClasses() { var traitCollection_hCompact = UITraitCollection(horizontalSizeClass: UIUserInterfaceSizeClass.Compact) var traitCollection_vRegular = UITraitCollection(verticalSizeClass: UIUserInterfaceSizeClass.Regular) compactRegular = UITraitCollection(traitsFromCollections: [traitCollection_hCompact, traitCollection_vRegular]) var traitCollection_hAny = UITraitCollection(horizontalSizeClass: UIUserInterfaceSizeClass.Unspecified) var traitCollection_vAny = UITraitCollection(verticalSizeClass: UIUserInterfaceSizeClass.Unspecified) anyAny = UITraitCollection(traitsFromCollections: [traitCollection_hAny, traitCollection_vAny]) } override func viewWillAppear(animated: Bool) { willTransitionToPortrait = self.view.frame.size.height > self.view.frame.size.width } override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) { willTransitionToPortrait = size.height > size.width } override func overrideTraitCollectionForChildViewController(childViewController: UIViewController) -> UITraitCollection! { // var traitCollectionForOverride = (willTransitionToPortrait) ? compactRegular : anyAny return traitCollectionForOverride; } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }