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