将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

 

iOS开发——混编Swift篇&OC移植为swift的更多相关文章

  1. iOS开发——图形与动画篇OC篇&图层基本上动画

    图层的一些基本动画效果 #define kRadianToDegrees (radian) (radian * 180.0) / (M_PI) //闪烁 [self.testView.layer ad ...

  2. iOS开发之OC与swift开发混编教程,代理的相互调用,block的实现。OC调用Swift中的代理, OC调用Swift中的Block 闭包

    本文章将从两个方向分别介绍 OC 与 swift 混编 1. 第一个方向从 swift工程 中引入 oc类 1. 1 如何在swift的类中使用oc类    1.2  如何在swift中实现oc的代理 ...

  3. ios图文混编瀑布流

    ios图文混编瀑布流,利用UICollectionView 实现图文混编的瀑布流,支持section内容伸缩 http://www.huiyi8.com/pubuliu/

  4. iOS开发:(线程篇-上)线程和进程

    iOS开发多线程篇—多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcod ...

  5. iOS开发系列-Block本质篇

    概述 在iOS开发中Block使用比较广泛,对于使用以及一些常规的技术点这里不再赘述,主要利用C++角度分析Block内部数据底层实现,解开开发中为什么这样编写代码解决问题. Block底层结构窥探 ...

  6. IOS开发入门教程-总结篇-写给狂热的编程爱好者们

    程序发轻狂,代码阑珊,苹果开发安卓狂!--写给狂热的编程爱好者们 写在前面的话 学习iOS应用程序开发已有一段时间,最近稍微闲下来了,正好也想记录一下前阶段的整个学习过程.索性就从最基础的开始,一步一 ...

  7. iOS开发学习笔记:基础篇

    iOS开发需要一台Mac电脑.Xcode以及iOS SDK.因为苹果设备都具有自己封闭的环境,所以iOS程序的开发必须在Mac设备上完成(当然,黑苹果应该也是可以的,但就需要花很多的精力去折腾基础环境 ...

  8. IOS开发之——Masonry 只支持OC,暂不支持swift

    前言 1 MagicNumber -> autoresizingMask -> autolayout 以上是纯手写代码所经历的关于页面布局的三个时期 在iphone1-iphone3gs时 ...

  9. 转载 【iOS开发】网页JS与OC交互(JavaScriptCore) OC ----->JS

      目标 本文介绍利用苹果在iOS7时发布的JavaScriptCore.framework框架进行js与OC的交互.我们想要达到的目标是: OC调用网页上的js方法 网页js调用APP中的OC方法 ...

随机推荐

  1. Android WebView常见问题的解决方案总结----例如Web page not available

    之前android虚拟机一直都可以直接联网,今天写了一个WebView之后,突然报出了Web page not available的错误,但是查看虚拟机自带的浏览器,是可以上网的,所以检查还是代码的问 ...

  2. Oracle中表结构和表内容复制

    处理该问题注意以下几点: 1. 清空表中数据SQL:truncate table table_name; 2.复制表结构SQL:create table table_name1 as select * ...

  3. qt 设置背景图片

    博客出处:http://www.cppblog.com/qianqian/archive/2010/07/25/121238.htm 工作似乎走上正轨了,上周五的工作是做一个界面,用到QFrame和Q ...

  4. ubuntu开发软件的安装

    今天下午发现ubuntu12.04坏了,无奈只能重新安装,建议读者配置自己的ubuntu后备份一个,免得坏了重新安装,花了两个小时才把ubuntu的交叉环境弄好,其中搭建了tptp通信协议,还有arm ...

  5. Hadoop中FileSystem的append方法

    今天在使用Hadoop 1.1.2版本进行FileSystem的append操作时报以下异常: org.apache.hadoop.ipc.RemoteException: java.io.IOExc ...

  6. linux常用命令[持续更新]

    top 察看系统状态,退出按q ps -A 察看所有进程 ps -A|grep gcalc|awk '{print $1}'|xargs kill 杀掉所有gcalc进程

  7. j2ee的十三个规范

    转载 今天在做连接oracle数据库的时候,感受到了什么是规范.平时听到别人说学习j2ee一定要学习他的十三个规范,大概的知道每个规范是做什么的,每个“接口”是做什么的.          很早就听过 ...

  8. 最大二位子数组和问题(homework-02)

    前面已经谈过最大一维子数组和问题,这里面扩展到二维. 一. 常规情况 一个矩形的数组,找到一个矩形的子数组有最大的元素和,求这个和. 1. 从朴素算法入手,枚举矩形数组的4个顶点,以此计算其数组和.同 ...

  9. WebService学习之三:spring+cxf整合

    步骤一:spring项目(java web项目)引入CXF jar包 步骤二:创建webservice服务器 1)创建一个服务接口 package com.buss.app.login; import ...

  10. JSF 2 password example

    In JSF, you can use the <h:inputSecret /> tag to render a HTML input of type="password&qu ...