標籤:
將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)idx2 {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
iOS開發——混編Swift篇&OC移植為swift