《写给大忙人看的Swift》 试读

第1章 Swift介绍

1.1 swift是什么

    swift是苹果公司在2014向开发者发布的一门语言。可以用来开发IOS和OS X平台上开发应用程序。它兼容苹果之前的开发语言Objective-c,并计划最终取代Objective-C。

1.2 基本语法

1.2.1 变量&常量

    var声明变量,let声明常量。

    例子:

var count:Int //声明一个Int型

    swift是一种强类型语言,所以编译阶段就严格控制类型,两种类型不能混合操作。如,int和float不能混合运算。

    类型推断,上面的例子里通过冒号后的类型Int显式地声明了变量,但也可以不用显式通过变量初始化时赋值的类型来确定该变量的类型,如:

var count = 0   //跟上面例子一样的效果

 1.2.2 字符串插值

    这个功能非常方便地format了string,再也不用写好多“”和+了。它使用\()就搞定了,看例子:

var name = "Jay"
var age = 13
var content = "name:\(name), age:\(age) "
//结果: name:Jay, age:13

1.2.3 if语句

if aa > 0 {
   //语句
}
else if aa < 0 {
  //语句
}
else {
  //语句
}

1.2.4 switch

    这里switch跟C、Java不同的地方是它不用写break,自己会在下个case前跳出去,这个设定有坏也有好。据说第2章里有switch的高级用法

switch num {
case 0:
   //....
case 1:
   //....
default:
   //....
}

1.2.5 循环for, for-in, while, do-while

for var i = 0; i < 10; ++i {
   //...
}
for i in 0 ..< 10 {
   //0-9
}
for i in 0 ... 10 {
  // 0 -10
}
//items is array
for item in items {
  //item  
}
while i  < 100 {
  //....
}
do {
  //...
}while i < 100

     其中break和countine跟传统的一样用法。

1.3 基本数据类型

1.3.1 整形

    Int 在32位系统上是32位,在64为系统上是64位,这个设定也好蛋疼。

    还用更加明确的位数的类型Int8、Int16、Int32和Int64,无符号版本:UInt8、Uint16、UInt32 和 UInt64

1.3.2 Double和float

    都是小数类型,double是64位,float是32位。

1.3.3 Bool类型

    true和false

1.3.4 字符串

    count() 函数来获取字符串的长度

var iString = "Hello World"

1.3.5 数组

    声明一个数组:

    长形式: Array<ValueType>

    短形式: [ValueType]

var items:[String] = [] //显式
var items = [String] //隐式

let bosses = ["Jeff", "Tom", "Rob"]

1.3.6 字典

    长形式: Dictionary<KeyType, ValueType>

    短形式: [KeyType: ValueType]

  

var pp: [String:Int] = [:] //显式
var pp = ["aa":11] //隐式

1.4 感受

    感觉基本类型及控制结构跟js及java等语言非常相似,所以学习起来比较容易,不过有些地方还是挺疑惑的譬如Int居然操作系统位数不一样他还不一样,所以对于数字比较大的我们只能使用Int64了,免的在32位上溢出。

第7章 使用Objective-C

    对于这章作为一个没有学过Ob-c的我来说有很多困扰,譬如Ob-C的代码完全一头雾水,objective-c还是很神奇的语法。这章节主要讲如何和objective-c混用,互相调用。

7.1 调用C和Objective-C的APIs

    使用c或者ob-c之前先将框架通过inport导入到swift中: 

import Cocoa

     

    ob-c中类会自动转换成swift语法,我们不再需要alloc然后init了,而是使用Swift中的构造语法。

7.1.1 可空属性和返回值

    有两种返回情况需要注意:nil和AnyObject。因为Ob-C中没有可空类型,所以遇到nil返回时会被转换成可空对象返回,在swift中调用要小心,如果没有处理nil的情况,那么要么编译出差,要么运行崩溃。

7.1.2 AnyObject类型

    在返回对象不确定时会使用AnyObject这个宽泛的类型,那么程序需要对它进行类型判断。

7.1.3 继承、扩展和协议

//继承
class MySwiftController: UIViewController {

}
//实现协议
class SwiftViewControllerL UIViewController, UITableViewSource, UiTableViewDelegate {

}

    继承Obj-C类的时候我们需要遵守Swift的构造方法约定和规则,在需要dealloc的地方使用析构方法deinit替代。  

7.1.4 自动类型转换

    在调用Obj-C的时候会存在几种自动类型转换,称为“桥接类型”,如NSString会自动转换成String, NSNumber桥接到Int, UInt, Float, Double和bool。

    Array和字典在转换的时候会转换成[AnyObject]所以需要做类型检查。

7.1.5 选择器和枚举

7.1.6 与C代码交互

    为了和C交互Swift提供了可直接映射为C原始类型的“类C风格”,这些类型都是以大写C开头如bool映射CBool, const void * 映射为CConstVoidPointer等。

7.2 在项目中同时Swift和Objective-C

    在swift文件中使用ob-c的类,将用到的obj-c头文件用import语句引入,这样在swift中可以使用这些类了。

//Bridging-header.h
#import "MyAwesomeObjCClass.h"

var object = myAwesomeObjCClass() 
object.awesomeObjCFunction()

    在Obj-C类中调用Swift代码,需要将Swift类导入Obj-C文件中,使用import语句即可。

#import "ProducModuleName-Swift.h"

    Swift代码兼容Obj-C,需要继承NSObject或使用@objc修饰。

@objc class MySwiftClass {
   var name:String = ""
}

   读后感:

    苹果推出swift为了使开发变得简单话,因为没有使用过Objective-C开发过所以我也没有资格去评价Objective-C怎么样,但是Swift的语法要比较接近脚本语法比较容易理解和学习,但是因为要兼容Objective-C所以搞得有点混乱,互相杂糅。

    可能是因为一些时间原因swift还不是很健全,并且历史原因obj-c的资源和框架已经很多很丰富,这时候如果完全废除obj-c的话必定引起一些开发人员的反弹,所以也是很纠结的事情,希望不久的将来能够完全替代Objective-C,还是挺看好Swift的。