从语法上讲Swift非常华丽。它是一门非常简单、干净的语言,同时可读性也非常好,即使以现在的标准来衡量也是如此。你马上就会发现在设计一门语 言的时候简单性是一个关键要素。例如,大家所熟知的语句末尾的分号。苹果决定将分号作为可选的,虽然这看起来相关性并不是非常强,但是它却让我们看到了苹 果为了尽可能地保持语法干净所做出的努力。
你可能会将Swift中的泛型与Objective-C中的协议类比,虽然它们的语法非常相似,但是概念是非常不同的。Objective-C并不 支持泛型。协议提供了一种方式去声明一个确定的实现符合某个消息契约,但是契约必须预先指定。例如,使用协议你并不能强迫数组中的所有条目都是同一类型的 (无论是什么类型),但是使用泛型能够做到。除了概念上的不同之外,Swift并不支持协议,就像Objective-C不支持泛型一样。
下面简单性方面的其他例子包括字符串插入,以及语言对数组和循环处理的支持。
1.常量let和变量var
与OC不同Swift的类型只有let(常量)和var(变量)
使用常量let定义,不能重新赋值
let a = 10
let b = 20.1
//Swift 不支持隐式类型装换,不能让两个不一样的数据类型做四则运算
//Swift 强转的格式 : 数据类型 (需要强转的数据)
let c = Double(a) + b
//Swift支持隐式类型推断,可以根据初值,自动的判断Swift的数据类型
let b : String = "nihao"
//Swift也可以通过中文表情进行声明变量
let 明天 = "头么肉"
let 😢 = "哭"
//输出语句
printf("hello word")
//定义两个字符串命名的常量
let a = "Hotlet"
let b = "Nihao"
Swift 里面支持运算符的重载,会根据语境自动判断运算符的含义
let c = a + b(字符串拼接)
Swift里使用var定义一个变量(可修改的)
var a = 10
a = 100
//如果需要定义一个初值为nil的变量的话,格式:
var b : String? = nil //var + 变量名 + ":" + 变量类型 + ? = nil
2.数组
Swift数组里面的数据类型必须是一类的
let array = [1, 2, 3, "a"]//AnyObject Swift1.0版本,NSobject SWift2.0版本
//数组只能全是Int类型的
let array1 : [Int] = [1, 2, 3, 4]
//定义一个空数组
let array2 : [Int] = [];
数组的增,删,改,查
var array = [1, 2, 3, 4, 5]
var array1 = [11, 12, 13, 14]
增
1.数组里添加数组跟数据库的添加类似使用点语法
//如在array添加array1
//array.insertContentsOf(newElements: (要添加的数组), at: (在哪个位置添加))
array.insertContentsOf(array1, at: 3);
//数组的添加数组直接+(运算符的重载)
var array2 = [6, 7, 8, 9]
var array3 = array + array2
//添加元素
//array.insert(新元素, atIndex:添加到元素下标 )
//比如将10 添加到数组下标为2里
array.insert(10, atIndex: 2);
删
删除数据同时保存和不保存内存空间
Swift 中bool只有ture(真)和false(假)两种的参数
比如删除数组保留内存
array.removeAll(keepCapacity: true)
比如删除数组不保留内存
array.removeAll(keepCapacity: false)
通过下标删除
//首先需要定义一个ranger
let range : Ranger = Range(start: 0, end: 2)
array.removeRange(range)
改与查相同
直接通过数组下标就行
//将12改成101
array[1] = 101
3.字典
Swift的字典里 所有的key,所有的value都是必须同一种类型的
创建字典的两种方式
var dictionary = [1 : 2,3 : 4, "a" : "b"]//只使用Swift2.0
var dictionary1 : [Int : String] = [1 : "a" , 2 : "b"]
//字典的查找与访问通过点语法.indexForkey(key值)
print(dictionary.indexForKey(1))
字典的添加与修改一致都是通过key值
//比如有这个key值就是修改,没有的是添加
//dictionary[key值] = 赋过去的value
dictionary[5] = 9
//添加key 7 对应的value 8
dictionary[7] = 8
字典删除
dictionary.removeValueForKey(key值)
4.元祖
元组是非常简单的概念,你可以定义一个有序的值组。当你需要将多个值作为一个参数来回传递、或者被调用的函数需要返回多个值的时候元组会非常有用。
使用() 表示定义一个 元祖,元祖里面没有数据类型的概念
元祖也有下标
var type = ("Object","Swift")
// 访问元组的第一个方法
print(type.0)//输出Object
func info(items:[Int]) -> (avg:Int, min:Int, max:Int) {
var sum = items.reduce(0, { $0 + $1 })
var min = items.reduce(Int.max, { $0 > $1 ? $1 : $0})
var max = items.reduce(Int.min, { $0 < $1 ? $1 : $0})
return (sum / items.count, min, max)
}
var result = info([1, 2, 3, 4, 5, 6])
result.avg //3
result.min //1
result.max //6
5.结构
1.循环结构
通常循环结构在开发中常用的是for , while ,do while
for 循环在Swift中这样写
var array = [1, 2, 3, 4, 5]
//for循环
for var i = 0 ; i < array.count ; i++ {
print("array = \(i)")
}
while 循环在Swift中这样写
//while 循环
//循环变量
var i = 0
while i < 10 {
print("i = \(i)")
//循环条件
i++
}
do while 循环在Swift中这样写
repeat while 和do while一样
Swift1.0 版本的时候叫do while ,Swift2.0版本 的时候叫做repeat
//repeat while循环(do while)
repeat {
i++
print("i = \(i)")
}while i < 10
for in 循环在Swift中这样写
let array = [1, 2, 3, 4, 5]
for var a in array{
print(a)
}
2.条件结构
if esle Swift 中的使用
//定义变量
var timer :String? = nil
//在oc中我们可以直接将
if(timer){
print("timer存在")
}else{
print("timer不存在")
}
}
//在swift中必须讲条件写出
if timer != nil{
print("timer存在")
}else{
print("timer不存在")
}
枚举switch Swift 中的使用在
...代表的是如0...3 相当于 0到3 包含3
..< 10 代表的是 0 到 10 不包括10
//在Swift case中存在braeck
switch value {
case 0:
print(value)
case 1:
print(value)
default:
print("超了")
}
//这样写,case 0 到 10 之间,case 11 到 20 之间
switch value {
case 0...10:
print(value);
case 11...20:
print(value)
default:
print("又超了")
}
//通过case的point 的元祖进行查询
let point = (10, 10)
switch point {
case (10, 10):
print(point)
case ( _, 10):
print(point.0)
case ( 10, _):
rint(point.1)
case (_, _):
print(point)
}
//case也可以加入where条件
let value = 0
let value1 = 100
switch value{
case 0 where value1 < 10:
print(value)
case 0 where value1 > 10:
print("正确")
default:
print("错误")
}
6.函数
无参数无返回函数
func(关键字) test(函数名) "()"(参数列表) -> Void(返回类型)
func test() -> Void{
print("我是第一个函数,无参无返回值")
}
test()
无参数有返回(在Swift分 单个返回值,多个返回值)
func test1() ->String{
return "我是第二个函数,无参有返回值"
}
//返回一个int类型的数组
func test2() ->Array<Int> {
return [1, 2, 3]
}
//返回一个OC的数组
func test3() ->NSArray {
return [1, 2, "a", "b"]
}
print(test2())
print(test1())
有参数有返回
参数格式参数名+ ":" + 参数类型
func test8(name : String , age :String) -> (String , String){
return (name , age)
}
let type1 = test8("大宝", age: "18")
print(type1.1)
print(type)
func test6(name : String ,age : String) -> (String , String) {
return (name , age);
}
func test6(dic : NSDictionary ) ->NSDictionary{
return dic;
}
无参数有返回(在Swift分 单个返回值,多个返回值)
//多个返回值需要通过元祖类型返回
func test7() -> (String ,String) {
return ("大宝" , "16")
}
let type = test7()
print(type)
print(type.1)
inout函数(新增)
Swift函数里面的参数 默认是使用let修饰符的,是不可以更改的
inout一般是通过函数的外面变量的值
func test8(inout number : Int){
number = 100
}
var a = 5
test8(&a)
print(a
除了上面介绍的特性之外Swift还有很多其他的优秀特性值得我们一看,例如属性观察器、可选链接以及扩展。
我相信Swift具备快速成为一门流行的iOS和OSX编程语言所需要的所有必须条件,无论是在企业领域还是在消费者领域。强类型和类型推理特性将会让它非常适合于企业开发,而它的简单性和干净的语法则会吸引那些从事消费者项目的开发人员。