wwwdc 2014大会,苹果推出了新语言—雨燕swift
。虽然很多开发者如往年一样,进行了大量的神吐槽,但是为了尽快成为坐在马背上的那个人—跟着趋势走,还是来赶快学习一下雨燕吧。
xcode 6 beta
伴随着雨燕发布的开发工具是xcode 6测试版 ,下载安装后。创建单个控制器的程序,我们可以知道可以选择Objective-c
或者Swift
语言来进行开发。不多说,选择Swift看看差异:
工程目录更简洁
我们可以知道在xcode5的版本中,文件夹分为:工程文件夹、单元测试文件夹、框架文件夹和product文件夹。xcode6直接省去了框架文件夹。
类文件的简化
我们可以看到AppDelegate.swift和ViewController.swift两个类文件,main.storyboard一如往常。由此可知,类文件.h与.m合并为一个.swift,减少头文件与实现文件的切换过程。
更少的支持文件
没有了main.m程序入口文件、prefix.pch文件和国际化语言plist文件,仅仅剩下一个yourproject.plist配置文件。
没有默认的lib文件
通过.swiftimport UIKit
和target>> build phase的link binary with lib 为空可知:foundation.framework
、UIKit.framework
与XCTest.framework
三个基础框架系统不在显示,UIKit将作为必须框架自动为您导入到工程中.说明了:系统其实还是自动为您导入了一个UIKit框架,但以后link binary lib中将直接显示你导入和用到的framework&lib文件。
进入swift世界
Swift
是建立在C与Objective-c优点上的用于编写IOS和Mac OSX应用的一门新语言。为了实现更简单、灵活而有趣的编程,它摒弃了C语言兼容上的限制性,集合了更多的安全编程模块和现代的编程特性。
再见hello world
按照编程界惯例,来写一条hello world。
恭喜您,你学会了一门语言!lol,是不是很熟悉呢?其实就是C上的log语句,只不过少了分号。对的,swift允许您:
1. 不导入基础库。如i/o或者string文件。
2. 不需要main函数。在任何全局范围内写语句,都会被当作是入口。囧,当然这在工程里还是从appDelegate开始。
3. 不需要分号。blog主表示再次冒汗。
常量与变量
swift中对于简单型数据只有两个关键字,常量let
和变量var
。赋值时变量名
与=
必须用空格
分开,否则编译器报错。
1
2
3
4
5
6
7
8
9
10
11
/*------对于常量,你必须给他赋一个值-----------*/
let implicInt = 70 // 不明确的赋值
let implicDouble = 70 . 0 // 不明确的赋值
let explicDouble : Double = 70 // 明确说明是 double 类型赋值
/*------对于类型转换,必须明确指出-----------*/
let str = "this is string"
let int_a = 70
let int_b = 80
let str_int = str + String ( int_a ) // 您必须明确指出需要转换类型,否则编译器会报错。
let string_ing = "\(int_a) + \(int_b) = \(int_a+int_b)" // 另一种转换
可空变量
既可以是一个值,也可以是一个nil来表明该值不存在。可空变量在变量名后用var 变量名:数据类型?
表示。
数组与字典
通过[]
来创建数组与字典,并且通过索引
或者键值
来创建元素。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/*------创建空数组或字典-----------*/
let emptyarr = String [] ()
let emptydic = Dictionary < string , float > ()
/*------您也可以这样引用空数组-----------*/
emptyarr = []
emptydic = [ : ]
/*------创建带值的数组或字典-----------*/
var letters = [ "A" , "B" , "C" ]
letters [ 1 ] = "A"
var letters = [
"keyA" :"A" ,
"keyB" :"B"
]
控制流
使用if
和switch
作为控制条件,使用for
、for-in
、while
和do-while
循环迭代。它们的参数是可选的,但是主体是必须的。
1
2
3
4
5
6
7
8
9
10
11
/*------迭代方式-----------*/
let arrs = [ 10 , 20 , 30 , 40 ]
var result = 0
for aVar in arrs {
result += aVar
}
println ( "result is:\(result)" )
/*------if 条件语句必须是明确的布尔值-----------*/
var notAboolen = 0
if notAboolen {} // 这种方式是错的 , switf 不知道 notAboolen 是布尔值。
你可以用let
配合可空变量
作为if的条件判断。在条件语句中可空变量赋值给let常量后,如果是nil则常量变为false布尔型;否则为true。
1
2
3
4
5
6
7
8
var optVar : String ? = "John" // result : hello , john
//o ptVar = nil // result : hello!
var greeting = "Hello!"
let name = optVar
if name { // 也可以这样写 if let name = optVar {}
greeting = "Hello, \(name)"
}
println ( "\(greeting)" )
swith 语句
switch
语句支持所有类型的比较,不仅限与整型条件,也可以是复杂的判断操作等,无break语句。在swift中default
条件是不能少的,并且最起码要有一条执行语句。而且执行完一个判断条件主体,程序直接跳出swith块。
1
2
3
4
5
6
7
8
9
10
11
12
13
var vResult = ""
let vegetable = "red pepper"
switch vegetable {
case "celery" :
vResult = "Add some raisins and make ants on a log."
case "cucumber" , "watercress" :
vResult = "That would make a good tea sandwich."
case let x where x . hasSuffix ( "pepper" ): // x 变量尾部是否包含 pepper
vResult = "Is it a spicy \(x)?"
default : // 不可少
vResult = "Everything tastes good in soup." // 最起码包含一条语句
}
println ( "\(vResult)" ) // result : Is it a spicy red pepper?
for-in 语句
for-in 对于枚举一个字典,我们可以使用两个用(键,值)
来作为枚举方式的过程变量。对比OC来说,这不失为是一种更简洁的方式。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var anEmployee = [
"company" :"myCompamy" ,
"empName" :"jonz" ,
"department" :"dev" ,
"salary" :"3000"
]
println ( "here is an employee infomation:" )
for ( key , value ) in anEmployee
{
println ( " \(key):\(value)" )
}
/*-------the result is:--------------*/
here is an employee infomation :
empName : jonz
department : dev
salary : 3000
company : myCompamy
使用..
和...
来表示范围
对于明确循环界限的迭代,我们可以使用..
来作循环。比如求从0到3之间的数字和:
1
2
3
4
5
6
7
8
9
10
11
var count = 0
for i in 0 . . 4 { // 注意迭代编程中的少 1 问题,这里相当于 for var i = 0 ; i < 4 ; i ++
count += i
}
println ( "\(count)" ) // result is : 6
count = 0
for i in 0 . . . 3 { // 注意迭代编程中的少 1 问题,这里相当于 for var i = 0 ; i <= 3 ; i ++
count += i
}
println ( "\(count)" ) // result is : 6
我们知道,新的特性使语句更加简短,..
不包含范围的上界,...
包含了范围的上界.
end line
好了,就先写到这里。对于编程里的函数与类、对象,由于内容比较多将记录在下一篇blog里。