1.什么是swift
2014年臂港,蘋(píng)果公司推出的全新編程語(yǔ)言
天朝翻譯為雨燕蚊荣,logo就是個(gè)雨燕
跟oc一樣都用于ios,mac
2010-2014.4年開(kāi)發(fā)
2.語(yǔ)法特點(diǎn)
可以看到oc敌蜂,javascript庆械,c#,python等語(yǔ)言影子
借鑒了這些語(yǔ)言的優(yōu)勢(shì),同時(shí)具備編譯型語(yǔ)言的高能性盒让,和腳本語(yǔ)言的靈活性【不需要全部編譯通過(guò)梅肤,才能運(yùn)行】
3.相關(guān)數(shù)據(jù)
Xcode>6.0
mac >10.9.3
4.注意
swift的源文件的拓展名是.swift
比如:main.swift
兩個(gè)不需要
a.不需要寫(xiě)main函數(shù)
從上往下依次執(zhí)行,所以最前面的代碼自動(dòng)當(dāng)做程序的入口
b.不需要每一條語(yǔ)句都加分號(hào)
let num = 2
加上也是對(duì)的
但是---如果同一行代碼邑茄,有幾條語(yǔ)句的時(shí)候姨蝴,需要加上分號(hào)
let a = 1;let b = 2;let c= 3
注釋
單行注釋
//這是當(dāng)行注釋
多行注釋
/*
這是多行注釋
這是多行注釋
*/
多行注釋可以嵌套使用
/*
外層注釋
/*
內(nèi)層注釋
內(nèi)層注釋
*/
外層注釋
*/
5.常量與變量
let 聲明常量
let radius = 10
var 聲明變量
var age = 20
var x = 0, y = 1 , z= 2
命名
基本上可以用任何你喜歡的字符作為常量和變量名
let ? = "蘋(píng)果"
let 電話 = “110”
let?? = “一坨”
control+command + 空格 輸出emoji
6.字符串簡(jiǎn)單操作
字符串是String類型,用“”包住內(nèi)容
let str = "123"
let str2 = "456"
用加號(hào)肺缕,字符串拼接【兩個(gè)不同類型的數(shù)據(jù)不能相加】
let str3 = str + str2;
用反斜線\和小口號(hào)()做字符串插值(把常量左医,變量插入到字符串中)
let hand = 2
var age = 10
let str = "我今年\(age)歲,有\(zhòng)(hand)只手"
7.打印輸出
println--輸出內(nèi)容后自動(dòng)換行
print -- 少了自動(dòng)換行的功能
8.數(shù)據(jù)類型
Int同木,F(xiàn)loat浮梢,Double,Bool彤路,Character秕硝,String
Array,Dictionary,元祖類型(Tuple),可選類型(Optional)
---我們可以看出,數(shù)據(jù)類型首字母都是大寫(xiě)
如何定義常量或者變量的數(shù)據(jù)類型
let age:Int = 10
一般來(lái)說(shuō)洲尊,沒(méi)有必要明確指定數(shù)據(jù)的類型
如果远豺,在聲明變量、常量時(shí)坞嘀,賦了初始值躯护,swift可以自動(dòng)推動(dòng)該變量或者常量的類型
let age = 10
會(huì)推斷出age是Int類型
9.變量的初始化
swift嚴(yán)格要求變量在使用之前初始化,不會(huì)像oc自動(dòng)有默認(rèn)值
整數(shù)
swift提供了特殊的有符號(hào)整數(shù)類型Int和無(wú)符號(hào)整數(shù)類型UInt
Int/UInt的長(zhǎng)度和當(dāng)前系統(tǒng)平臺(tái)一樣
在32位系統(tǒng)姆吭,Int和UInt都是32位
在64位系統(tǒng)榛做,Int和UInt都是64位
建議
在定義變量時(shí)候,別總是考慮有無(wú)符號(hào)内狸,數(shù)據(jù)長(zhǎng)度的問(wèn)題
盡量使用Int检眯,這樣可以保證代碼的簡(jiǎn)潔,可復(fù)用性
浮點(diǎn)數(shù)
Double -- 至少精確到15位
Float -- 至少精確到6位
浮點(diǎn)數(shù)可以用十進(jìn)制和十六進(jìn)制表示
十進(jìn)制(沒(méi)有前綴)
沒(méi)有指數(shù):let d1 = 12.5
有指數(shù):let d2 = 0.125e2
12.5 = 0.125 *10*10
十六進(jìn)制(以0x為前綴昆淡,且一定有指數(shù))
let d3 = 0xC.5p0
數(shù)字格式
可以增加額外的0锰瘸,還可增加額外的下劃線
let a = 100000
let b = 100_000
let c = 100
let d = 0100.00
10.類型轉(zhuǎn)換
兩個(gè)不同類型的數(shù)值不能相加
let num = 1
let num2 = 1.0
let sum = num + num2
上面代碼第三行會(huì)錯(cuò)
解決
let sum = Double(num)+ num2
類型別名
可以使用 typealias關(guān)鍵字定義類型的別名,跟C語(yǔ)言的typedef作用類似
typealias MyInt = Int
給Int起個(gè)別名叫MyInt
元類型名稱能用在哪兒昂灵,別名就能用在哪
let a:MyInt = 2
let minValue = MyInt.min
11.數(shù)組
如果定義數(shù)組時(shí)指定了保存對(duì)象的類型避凝,擇不能向數(shù)組中添加其他類型的內(nèi)容
let 定義的數(shù)組是不可變的
var 定義的數(shù)組是可變的
// 數(shù)組中保存的都是字符串
let arr = ["zhangsan", "lisi"]
// 數(shù)組中保存的是 NSObject
let arr1 = ["zhangsan", 1]
// 添加元素
array.append("lisi")
//更新
array[0] = "zhangwu"
// 刪除元素
array.removeAtIndex(1)
// 拼接數(shù)組
var array2 = [String]()
array2.append("1")
array2.append("2")
array += array2
12.字典
// 定義并實(shí)例化字典(這種類型是開(kāi)發(fā)中常用的類型)
var dict = [String: AnyObject]()
//添加(更新)
dict["name"] = "zhangsan"
dict["age"] = 18
// 刪除
dict.removeValueForKey("age")
// 合并字典
var dict2 = ["name": "wangwu", "age": 80, "title": "boss"]
for (k, v) in dict2 {
dict.updateValue(v, forKey: k)
}
13.元祖
元組(tuples)把多個(gè)值組合成一個(gè)復(fù)合值眨补。元組內(nèi)的值可以使任意類型,并不要求是相同類型撑螺。
let http404Error = (404, "Not Found")
// http404Error 的類型是 (Int, String),值是 (404, "Not Found")
println("The status code is \(http404Error.0)")
// 輸出 "The status code is 404"
println("The status message is \(http404Error.1)")
// 輸出 "The status message is Not Found"
你可以在定義元組的時(shí)候給單個(gè)元素命名
let http200Status = (statusCode: 200, description: "OK")
給元組中的元素命名后甘晤,你可以通過(guò)名字來(lái)獲取這些元素的值:
println("The status code is \(http200Status.statusCode)")
// 輸出 "The status code is 200"
println("The status message is \(http200Status.description)")
// 輸出 "The status message is OK"
14.循環(huán)和遍歷
//whlie
while false
{
}
//類似于do...while
repeat
{
}while false
// 循環(huán)
for var i = 0; i < 10; i++ {
print(i)
}
// 遍歷 0 ~ 9(省略號(hào)之間不能有空格)
for i in 0..<10 {
print(i)
}
// 遍歷 0 ~ 10(省略號(hào)之間不能有空格)
for i in 0...10 {
print(i)
}
// 特殊寫(xiě)法(如果不關(guān)心循環(huán)本身的索引,可以用通配符'_'忽略)
for _ in 0...10 {
print("hello")
}
數(shù)組遍歷
var studentArr = [1,2,3,4,5,6,7,8,9]
for item in studentArr
{
print("item = \(item)")
}
//可以遍歷數(shù)組中的所以和元素(間接用到了元組的特性)
for(index,value)in studentArr.enumerate()
{
print("index =\(index) value = \(value)")
}
/字典的遍歷
var studentDic = ["姓名":"張三","愛(ài)好":"男""]
for (key,value)in studentDic
{
print("key = \(key) value = \(value)")
}
15.switch和枚舉
//swtich(自帶break,可以重復(fù),但是找到一個(gè)就不會(huì)找第二個(gè))
var name1 = "小明"
switch name1
{
case "小明":print(name1)
//要想要自帶貫穿效果(重復(fù)之后也繼續(xù)尋找)加fallthrough關(guān)鍵字
fallthrough
case "小明":print(name1)
//一定要包含所有條件
default: print("不存在")
}
//case可以寫(xiě)區(qū)間
var age1 = 12
switch age1 {
case 10...15:
print("a")
default:
print("默認(rèn)")
}
//當(dāng)age2 == 15成立的時(shí)候把a(bǔ)ge2賦給age
var age2 = 15
switch age2{
case let age where age2 == 15:
print("age = \(age)")
default: break
}
//遍歷元祖
var studentTuple = (姓名:"張三",性別:"男",年齡:12)
switch studentTuple
{
case ("張三","男",12):
print("找對(duì)了")
case (_,_,12):
print("找對(duì)了")//只要一個(gè)條件成立就可以進(jìn)
default:
break
}
*枚舉
//枚舉(和oc一樣默認(rèn)初始值是0,如果修改初始值的話需要制指定類型,swift的枚舉創(chuàng)建必須要帶case)
enum season :Int
{
case spring = 2
case summer
case autumn
case winter
}
print(season.autumn)
//打印枚舉值的值
print(season.autumn.rawValue)
var today = season.summer
//篩選枚舉
switch today
{
case.spring:print("春天")
case.summer:print("夏天")
case.autumn:print("秋天")
case.winter:print("冬天")
}
16.函數(shù)
//函數(shù)
//無(wú)參無(wú)返回
func func1()
{
print("無(wú)參無(wú)返回值")
}
//無(wú)參有返回
func func2()->String
{
print("無(wú)參有返回值")
return "小明"
}
//有參無(wú)返回
func func3 (a :String)
{
print("有參無(wú)返回值")
}
//有參有返回
func func4 (a:Int)->String
{
print("有參有返回值")
return String(a)
}
//函數(shù)調(diào)用
func1()
func2()
func3("123")
func4(1)
//返回值是多個(gè)參數(shù)
func func5()->(Int,String)
{
return(1,String(123))
}
17.結(jié)構(gòu)體
我們通過(guò)關(guān)鍵字 struct 來(lái)定義結(jié)構(gòu)體:
struct nameStruct {
Definition 1
Definition 2
……
Definition N
}
我們定義一個(gè)名為 MarkStruct 的結(jié)構(gòu)體 遏弱,結(jié)構(gòu)體的屬性為學(xué)生三個(gè)科目的分?jǐn)?shù),數(shù)據(jù)類型為 Int:
struct MarkStruct{
var mark1: Int
var mark2: Int
var mark3: Int
}
我們可以通過(guò)結(jié)構(gòu)體名來(lái)訪問(wèn)結(jié)構(gòu)體成員漱逸。
結(jié)構(gòu)體實(shí)例化使用 let 關(guān)鍵字:
struct studentMarks {
var mark1 = 100
var mark2 = 78
var mark3 = 98
}
let marks = studentMarks()
print("Mark1 是 \(marks.mark1)")
print("Mark2 是 \(marks.mark2)")
print("Mark3 是 \(marks.mark3)")
以上程序執(zhí)行輸出結(jié)果為:
Mark1 是 100
Mark2 是 78
Mark3 是 98
18.類
Class classname {
Definition 1
Definition 2
---
Definition N
}
定義一個(gè)類
class student{
var studname: String
var mark: Int
var mark2: Int
}
創(chuàng)建一個(gè)實(shí)例的語(yǔ)法:
let studrecord = student()
class studentMarks {
var mark = 300
}
let marks = studentMarks()
println("Mark is \(marks.mark)")
輸出:
Mark is 300