淺談Swift的入門

從語法上講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編程語言所需要的所有必須條件,無論是在企業領域還是在消費者領域。強類型和類型推理特性將會讓它非常適合于企業開發,而它的簡單性和干凈的語法則會吸引那些從事消費者項目的開發人員。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容