记 OC 转swift3.0 邂逅感

起因

虽然 swift 出到现在已经有很长一段时间了,还记得最初发布的时候那时候正在流行Flappy Bird这款游戏,我也有下载去玩,那时候记得新语言刚刚放出没多久就有大神用新语言翻了一遍这个游戏,可以看出有代码基础的前提下来开发是完全没啥问题的,那时候只是觉得有趣,但是知道想普及没个几年时间是不行的,那时候也有很多这种言论,而且语法一直在发生改变,每次改变语法都会让之前的代码需要重新修改,跟 OC 这种一沉不变的语言果然是不一样的,所以那时候我也没想去学习,在swift 出3.0后我也只是微微表示下关注而已,并没有想学习的意愿,感觉后面还是 会有4.0,5.0等等..只不过在项目需要用到 chart 这个第三方图表框架,由于这个框架是从安卓那边几乎复制过来, 用 swift 语言编译,API 的相似程度官方都已经说有90多,所以官方连文档也懒得重新写,直接说看安卓的文档就行,我也是因为这样才慢慢去学习swift, 但因为只是改改源代码,所以就么有系统的学习,只是大概了解,所以对于这个语言也是一知半解,等到项目完成后有时间才重新认识下这门新语言.

OC 转 swift 会不会很难?

老实说吧,如果你什么语言都不会只会 OC 的话,直接看 swift 是有些晕的,别说你会点 C 基础,没什么用,毕竟只是基础,估计都忘光了.
学习这个语言有两个方向,我自己总结是这样的.

  • 直接学习 swift 语言,系统的学习一遍 swift
  • 以 iOS 为标准去学习 swift
    这两者有什么区别,区别还是有的, 前者需要大量的时间去系统的学习,耗时较久,但是效果杠杠的,充分了解这门语言,可以用于非 iOS 开发.
    后者其实就是完全为了 iOS 开发而学习这门语言,这种学习方式可以说是一边编程 iOS 一边学习,用到哪些知识的时候再去了解,当然前期的知识肯定是要先了解才能下手的,但这种方式弊端也是很明显,容易走弯路,只能说对于想速成或者说对自己有信息的小伙伴才选择这种方式.

举个栗子说下吧

以 iOS 为前提,swift 对于 oc 的区别有什么,我大概说下吧,肯定是不全面,但是也是我自己觉得比较重要的.

  • 属性
    比如是ViewController页面,属性写在ViewController这个大括号里面
属性
  • 懒加载
    swift的懒加载就是在属性前面加 lazy 关键字,在大括号内相当于新建另一个最后在 return 给懒加载的属性
懒加载
  • 宏定义define
    在 swift 中已经不能使用 #define来宏定义了,所以在界面头部定义可以这样写,但是由于swift 中已经不需要像 oc 一样声明某个头文件,所以如果按照我这样写,其实在其他文件都是可以访问的,相当于你的定义是写在 oc 中的全局文件中.
define
  • 设置代理
    在 oc 中,我们设置代理后都是在@interface的类括号后面<>里面去实现,但是 swift 中不是,而是在 class 后面的集成类中直接继承你的代理或者数据源,前面的截图也是这样的.
  • oc 混编到 swift
    我们很多第三方库是 oc 语言的,但是这并不妨碍我们去使用, swift 也可以直接引用 oc 中的库,使用 cocoapod 可以很容易的集成.集成后需要新建一个桥接文件,如果觉得麻烦,可以直接在项目新建一个类,但是这个类是 objectc 的类,点击创建后会问你要不要自动建立桥接文件,点击 create 后就自动新建了桥接文件并且配置好,不需要繁琐的步骤,然后就可以把刚才新建的oc 类删掉了.
  • oc 在 swift 中的声明
    在桥接文件# import 你要用到的类,这样你每个类都可以使用了,只不过不会有代码提示,需要自己一个个的敲,但是如果编译不过还是会提示的.
oc 桥接
  • oc 在 swift 中的使用
    你对 swift 有一定的了解后去用的话,就会觉得其实没多大区别,我举个例子
OC

swift
  • swift 的方法
    swift 中方法以 func 开头,默认是公有方法,如果想变成私有方法,在 func 前面加private关键字,但其实我经常使用的也只是 func 创建方法,如果有返回值,跟 oc 不一样, oc 是写在括号里面,但是 swift 方法前面没有括号,所以是这样写.
swift 的方法

大致意思是这样的,test 是方法名称,名称后面的括号是入参属性,由于没有入参属性所以就只有括号,->后面代表的就是返回值类型,如果你创建一个没有参数没有返回值的,可以直接写 func test(){}这样就可以了,当然括号还是必须的,返回值没有可以省略,可以有多个参数,多个返回值,只要在返回值后面加个逗号就可以继续写,当然需要有个括号包裹起来才可以,如图

多返回值
  • 点语法
    swift 中没有了 oc 中的那种空格调用语法,比方说[app delegate]这样的写法, swift 中以点语法为主,最简单的例子:

      //swift
      UIApplication.shared.isNetworkActivityIndicatorVisible = true
      //oc
      [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
    

基本上 swift 都是点语法,熟悉后会发现这类语法很常见.

  • swift 中的 block
    swift 中也有 block 这种概念,可以多参数,具体还是看图
对block 的声明
调用这个 block,但是不执行,等代码块的时候再执行
在其他页面执行,跟 oc 一样在代码块里面执行,少了^号
在方法中参数里面的 block
调用这个方法
  • 一些其他的东西
// 旋转动画
let anim = CABasicAnimation(keyPath: "transform.rotation")
        anim.toValue = M_PI*2//旋转一圈
        anim.duration = 0.8//旋转时间
        anim.repeatCount = MAXFLOAT//旋转圈数
        anim.isRemovedOnCompletion = true
        refreshBtn.imageView?.layer.add(anim, forKey: nil)//添加动画
        //GDC 延迟执行
        DispatchQueue.global().asyncAfter(deadline: .now()+2.0) {
            OperationQueue.main.addOperation {
                //停止旋转,记得要在主线程执行
                self.refreshBtn.imageView?.layer.removeAllAnimations()
            }
        }
  • 还有很多东西,但是一时也想不起来,未完待续吧,看有什么就补充下.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容

  • Swift 介绍 简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序 ...
    大L君阅读 3,128评论 3 25
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,596评论 4 59
  • 因为要结局swift3.0中引用snapKit的问题,看到一篇介绍Xcode8,swift3变化的文章,觉得很详细...
    uniapp阅读 4,284评论 0 12
  • Day 1: 一下飞机就马不停蹄的奔向 Oak Alley Plantation, 3645 LA-18, Vac...
    杨有为阅读 1,801评论 0 1
  • 营销,其实就是一个劝诱的过程 劝是推动,催促他(她)张开眼睛,注意你要给的东西; 诱是拉动,你要给的东西充满魅惑,...
    商学咨询阅读 378评论 0 1