相比于Objective-C,Swift语言更加简练。有时我们需要把原来写的一些Objective-C代码转换成Swift,下面总结了各种常见的情况。
1,构造函数的迁移
Objective-C为:
1 HanggeMenuItem *starMenuItem1 = [[HanggeMenuItem alloc] initWithImage:storyMenuItemImage 2
Swift:
1 var starMenuItem1 = HanggeMenuItem(image:storyMenuItemImage, highlightedContentImage:nil)
2,变量的定义
Objective-C为:
1 UIImage *starImage = [UIImage imageNamed:@"icon-star.png"];
Swift:
1 var starImage = UIImage(named:"icon-star.png")
3,数组
Objective-C为:
1 NSArray *menus = [NSArray arrayWithObjects:starMenuItem1, starMenuItem2, starMenuItem3];
Swift:
1 var menus = NSArray(objects:starMenuItem1, starMenuItem2, starMenuItem3)
4,实现协议的方法
Objective-C为:
1 - (void)awesomeMenu:(AwesomeMenu *)menu didSelectIndex:(NSInteger)idx
2 {
3 NSLog(@"Selected the index : %d",idx);
4 }
5 - (void)awesomeMenuDidFinishAnimationClose:(AwesomeMenu *)menu {
6 NSLog(@"Menu was closed!");
7 }
Swift:
1 func awesomeMenu(menu:AwesomeMenu, idx:Int)
2 {
3 println("Selected the index : %d",idx)
4 }
5 func awesomeMenuDidFinishAnimationClose(menu:AwesomeMenu)
6 {
7 println("Menu was closed!")
8 }
5,检测代理是否实现某个方法
Objective-C中协议继承自NSObjectProtocol协议,如果协议需要回调和检测某个代理是否实现了某个方法,使用NSObjectProtocol的respondsToSelector方法:
1 if(self.delegate.respondsToSelector(Selector("HanggeSwiftMenuWillAnimateClose:"))){
2 self.delegate.HanggeSwiftMenuWillAnimateClose(self)
3 }
而在Swift中使用?即可
1 self.delegate?.HanggeSwiftMenuWillAnimateClose(self)
当然如果有些东西你不想写,或者对OC有一定的经验,那么推荐你使用,优才网的一个转换工具,虽然目前还有一些bug,但是一般的转换都可以实现:
http://www.ucai.cn/tools/oc2swift