将Ojective-C代码移植转换为Swift代码
2015-03-09 15:07发布:yuhang浏览:201
相比于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