swift的基本語法 – iPhone手機開發 iPhone軟體開發教學課程

一 playground

1 練習swift是在playground中編寫

這裡寫圖片描述

—-> 1.1 導入框架(swift和oc的區別)
//oc格式的導入框架
#import 

//swift格式導入框架
import Foundation
import UIKit
—-> 1.2 定義標識符
—-> 註意:在swift中如果定義一個標識符,必須告訴編譯器該標識符是變量還是常量
—–> 1.2.1 如果是常量使用let修飾
//OC格式定義的常量
double s = 2.22;

//swift格式定義的常量
let b : Float = 1.2;
b = 2.22;//常量不能修改
—–> 1.2.2 如果是變量使用var修飾
//OC格式的定義變量
int a = 10;
a = 19;//修改oc定義的變量

//swift格式定義的變量
var a : Int = 10;
a = 19;
—-> 1.3 如果一行中隻有一條語句,那麼語句結束後,可以不加分號(;)
//隻有一行的swift語句不需要加分號(也可以加)
let c : Int = 10
var f : Double = 3.33
—-> 1.4 在swift中如何打印內容?
//oc打印內容
int g = 10;
NSLog(@"%d",g);

//swift語句打印內容
let d : Int = 100
var j : Double = 100.1
print(d)
print(j)

二 常量&變量

1 常量:定義完後不能修改(let開頭)

//常量
let a : Int = 10
let s : Double = 2.22
let b : Float = 1.2
//常量不能修改
a = 11
s = 1.11
b = 1.23
—-> 1.1 註意一:在開發中,apple建議優先使用常量,隻有發現需要修改時再改成變量
—-> 1.2 註意二:常量的本質,指向的內存地址不可以修改,但是可以通過內存地址獲得到對象,之後修改對象內部的屬性

2 變量

//變量
var c : Int = 10
var f : Double = 11.2
var g : Float = 1.1
//變量可以修改
c = 11
f = 10.1
g = 1.2

3 註意:蘋果推薦使用變量來定義

三 在swift中創建對象(補充)

1 創建view對象

2 修改view內部屬性

3 創建view的子控件btn

—-> 3.1 設置按鈕的文字和類型

4 將btn添加到view中

//設置尺寸
let rect = CGRectMake(0, 0, 100, 100)
//創建view對象
let view : UIView = UIView(frame:rect)
//設置背景顏色
view.backgroundColor = UIColor.yellowColor()
//設置透明度
view.alpha = 0.5

//創建按鈕對象
let rectButton = CGRectMake(50, 50, 50, 50)
let button : UIButton = UIButton(frame: rectButton)
//設置顏色
button.backgroundColor = UIColor.redColor()
//添加按鈕
view.addSubview(button)

四 swift中的數據類型

1 整型: int

//整型
let e : Int = 10
var f = 11

2 浮點型: double(默認) ;float

//浮點型(默認是Double類型)
let a : Double = 1.2
let b : Float = 1.22
//是上面的簡寫
var c = 1.1
var d = 1.22

五 swift中的類型推導

1 如果定義一個標識符時,有直接賦值的話,那麼可以通過賦值的類型推導出標識符的類型

//不可變整型類型推導
let a = 10
//可變整型類型推導
var c = 11

//不可變浮點型類型推導
let b = 1.2
//可變浮點型類型推導
var e = 1.3

//對象的類型推導
let rect = CGRectMake(10, 10, 10, 10)
let button = UIButton(frame: rect)
button.backgroundColor = UIColor.redColor()
var sw = UISwitch()
sw.setOn(false, animated: true)

六 swift進行基本運算

1 oc中的隱式裝換:在int類型和double類型進行計算的時候,會自動將int類型轉換為double類型

//oc中的隱式轉換
int a = 12;
double b = 11.2;
double result = a + b;
int result = a + b;
NSLog(@"%f",result);

2 swift中如果要進行基本運算的話,那麼就必須保證類型一致,否則是無法進行運算的

—-> 2.1 類型一致
//swift的基本運算(類型一致)
let a = 10
let b = 11
let result = a + b
let result1 = a * b
print(result)
—-> 2.2 類型不一致
//swift的基本運算(類型不一致)--->不能計算
let c = 11
let d = 1.2
let result2 = c + d//會報錯

七 邏輯分支

1 if的使用

—-> 1.1 swift和oc中對if的區別
–OC中if語句
//oc中的if語句一
/*
int a = 8;
if (a > 0){
    NSLog(@"大於0");
}else{
    NSLog(@"小於0");
}
*/
//oc中的語句二
/*
int b = 10;
if (b){//oc中可以這麼做判斷
NSLog(@"大於0");
}else{
NSLog(@"小於0");
}
*/

—> 1>swift中if後面的()可以省略

//swift中的if語句一
//swift後面的判斷語句中的小括號可以省略
let a = 9
if a > 0 {
    print("大於0")
}else{
    print("小於0")
}

—> 2>沒有非0即真,必須有明確的Bool–>true/false

//swift中的if語句二(這是錯誤的寫法)
//swift中的if語句後面的判斷語句沒有非0即真,必須明確的標識false或者ture
/*
let b = 10
if b {
    print("大於0")
}else{
    print("小於0")
}
*/

2 通過if…else if來判斷一個分數是否合格(和if的用法基本是一致的)

//需求:給定一個分數,判斷出分數的范圍
let scroe = 100
if scroe  100{
    print("分數不合法")
}else if scroe < 60{
    print("不及格")
}else if scroe < 80{
    print("及格")
}else if scroe < 90{
    print("良好")
}else{
    print("優秀")
}

3 三目運算符

—-> 1>判斷兩個數的最大值(if和三目運算)—>三目運算符和oc完全一致

oc中的三目運算

//oc中的三目運算
/*
int a = 10;
int b = 9;
int result = a > b ? a : b;
NSLog(@"%d",result);
*/

swift中的三目運算

//swift中用三目運算來求結果
let c = 10
let d = 11
let result = c > d ? c : d;
print("兩者最大值為",result)

4 guard的使用(重點)—>判斷一個人是否可以上網

—-> 1>任何用if的地方都能用guard,反之也成立.但是guard可以提高代碼的可讀性,比if好用
—-> 2>guard語句必須帶else
—-> 3>guard的使用
—-> 3.1 如果條件表達式為真,則會執行後面的語句
—-> 3.2 如果條件表達式為假,則會執行else後面的{}語句
//swift中guard的代碼表示:
//需求:判斷一個年齡為20歲的人,能不能在網吧上網
let age = 20
//函數
func onLine(age : Int){
    //判斷一
    guard age > 18 else{
        print("不能上網")
        return
    }
    //判斷二
    guard 帶瞭身份證 else{
        print("不能上網")
        return
    }
    //判斷三
    guard 有電腦 else{
        print("不能上網")
        return
    }
    print("開機上網")
}
—-> 4 >補充(guard在國內翻譯為:守衛)

5 switch分支(swift和oc的區別)

oc中的 switch

//oc中switch語句的使用
/*
int a = 10;
switch (a){
    case 10:
        NSLog(@"等於10");
        break;
    case 11:
        NSLog(@"大於10");
        break;
    case 9:
        NSLog(@"小於10");
        break;
}
*/
—-> 5.1 switch後面的()可以省略
—-> 5.2 case結束後可以不加break,系統會默認跟上break
//switch在swift中的使用(一)--->switch後面的括號可以省略,可以不加break,系統會默認跟上break
let a = 11
switch a {
case 10:
    print("等於10")
case 11:
    print("大於10")
case 9:
    print("小於10")
default :
    print("其它")
}
—-> 5.3 switch基本用法的補充 1> case後面跟多個條件 2>如果case中希望產生case穿透,可以使用fallthrough
//switch在swift中的使用(二)--->如果希望產生穿透,直接使用fallthrough
//0 = 男; 1 = 女
let b = 0
switch b {
case 1:
    print("女")
case 2:
    print("男")
    fallthrough;
default:
    print("其它")
}
//switch在swift中的使用(四)--->case後面可以跟上多個條件
let e = 0
switch e {
case 0,1:
    print("人");
default:
    print("其它")
}
—-> 5.4 swift支持浮點型
//switch在swift中的使用(四)--->支持浮點型
let c = 1.2
switch c {
case 1.2,1.3:
    print("人")
default:
    print("其它")
}
—-> 5.5 swift支持字符串類型
//switch在swift中的使用(三)-->支持字符串類型
let 字符串 = "測試字符串"
switch 字符串 {
case "測試":
    print("測試就是兩個字!")
    break
case "字符串":
    print("字符串能吃嗎?")
    break
case "位置":
    print("不知道耶。。")
    break
case "測試字符串":
    print("終於對啦!")
    break
case let 測試:
    print("呵呵..沒有default吧?")
    break
}
—-> 5.6 swift支持區間類型(區間指的是:數字之間的區間)
//switch在switf中的特殊用法-->支持數字區間
let score = 80
switch score {
case 0 ..< 60:  //[0 60)
    print("不及格")
case 60 ..< 80: //[60 80)
    print("及格")
case 80 ..< 90: //[80 90)
    print("良好")
case 90 ... 100://[90 100]
    print("優秀")
default:
    print("分數不合法")
}

八 循環

1 打印出0~9

—-> 1.1 oc寫法(for循環)
//oc中的循環
/*
for (int i = 0 ;i < 10;i++){
    NSLog(@"%d",i);
}
*/
—-> 1.2 swift寫法(三種寫法)
//swift中的循環寫法(一)-->註意: "..<"是一塊的,中間不能隔開
for i in 0 ..< 10 {
    print(i)
}
//swift中的循環寫法(二)-->註意: "i++{"這樣挨著寫就會報錯
for var i = 0; i < 10; i++ {
    print(i)
}
//swift中的循環寫法(三)-->如果中間的i並沒有起到作用,可以用下劃線代替
for _ in 0 ..< 10{
    print("hellow world")
}

for _ in 0 ... 10{
    print("hellow swift")
}

2 while和do…while循環

—-> 2.1 swift中的while和oc的區別1> while後面的()可以省略 2>沒有非0即真
—-> 2.2 oc中的while和do…while循環
//oc中的whil使用
/*
while (條件表達式){
    NSLog(@"滿足條件進入");
}
*/
//oc中的do...while使用
/*
do{
    NSLog(@"總會先執行一次,然後在判斷while後面的表達式");
}while(條件表達式);
*/
—-> 2.3 將do換成repeat
//swift中的while使用(一)
var a = 13
while(a > 2){
    print("2");
    a--
}
//swift中的while使用(二)
var b = 13
repeat{
    print("2")
    b--
}while b > 0

九 字符串

1 使用let定義的字符串是不可變的

//不可變字符串
let a = "adc"
print(a)
a = "asv"錯誤寫法

2 使用var的字符串是可變的

//可變字符串
var b = "adc"
b = "ghj"
print(b)

3 獲取字符串的長度

//獲取字符串長度
var c = "adcv"
let length = c.characters.count
print(length)

4 遍歷字符串中所有的字符

//遍歷字符串中所有的字符-->e.characters類似於拿到字串中所有的字符
let e = "addafafda"
for d in e.characters {
    print(d)
}

5 字符串的拼接 1>兩個字符串之間的拼接2>字符串和其它標識符之間的拼接

//字符串的拼接(一)
let str = "xiaofeng"
let str1 = "肖鋒"

let str2 = str + str1//直接采用加法
//字符串和其它標識符之間的拼接
let name = "肖鋒"
let age = 19
let height = 1.88
//拼接
let togetherInfo = "my name is \(name),age is \(age), height is \(height)"
print(togetherInfo)

6 字符串的格式化

//字符串的格式化
let totalSecond = 64
let min = totalSecond / 60
let second = totalSecond % 60

let timeString = String(format: "%02d:%02d", arguments: [min, second])

7 字符串的截取 1>將string類型轉成NSString類型2>swift的截取方式

—-> 7.1 字符串的截取
var urString = "www.baidu.com"

//字符串的截取--->需要先將String類型轉為NSString類型(String as NSString)
let str1 = (urString as NSString).substringToIndex(3)
let str2 = (urString as NSString).substringFromIndex(10)
//截取中間部分
let range = NSMakeRange(4, 5)
let middle = (urString as NSString).substringWithRange(range)
7.2 swift的截取方式
//swift的截取方式
let toIndex = urString.startIndex.advancedBy(3)
let heard1 = urString.substringToIndex(toIndex)
//從尾部開始截取
let fromIndex = urString.endIndex.advancedBy(-3)
let footer1 = urString.substringFromIndex(fromIndex)

let range1 = Range(start: toIndex.advancedBy(1), end:fromIndex.advancedBy(-1))
let middle1 = urString.substringWithRange(range1)

十 數組

1 如何定義一個數組

—-> 1.1 定義不可變數組:使用let修飾
//定義不可變數組
let array = ["adc"]
print(array)
//array = ["adf"]這樣修改是錯誤的
—-> 1.2 定義可變數組:使用var修飾
//定義可變的數組
var array1 = ["adf"]
array1 = ["aefgg"]//合法的
print(array1)

2 對可變數組的基本操作(增刪改查)

—-> 2.1 增
//對數組中元素的添加(數組必須是可變的)
var array2 = ["xiaofeng"]
array2.append("nb")
array2.append("it")
—-> 2.2 刪
//對數組中的元素的刪除
var array3 = ["xaiofeng"]
array3.removeAtIndex(0)
print(array3)
—-> 2.3 改
//修改元素
var array4 = ["xiaofeng"]
array4.append("nb")
array4[1] = "it"
print(array4)
—-> 2.4 查
//獲取某個下標對應的元素
var array5 = ["xiaofeng"]
array5.append("it")
array5[0]
print(array5[1])

3 遍歷數組(四種方式)—>方式二和方式三比較常見

—-> 3.1 方法一
//遍歷數組(一)
var array6 = ["xaiofeng"]
array6.append("it")
array6.append("nb")
for i in 0 ..< array6.count {
    print(i)
    print(array6[i])
}
—-> 3.2 方法二
//遍歷數組(二)-->推薦
var array7 = ["xaiofeng"]
array7.append("it")
array7.append("nb")
for name in array7 {
    print(name)
}
—-> 3.3 方法三
//遍歷數組(三)-->推薦
var array8 = ["xaiofeng"]
array8.append("it")
array8.append("nb")
for (index, name) in array8.enumerate() {
    print(index)
    print(name)
}
—-> 3.4 方法四
//遍歷數組(四)
var array9 = ["xaiofeng"]
array9.append("it")
array9.append("nb")
for name in array9[0 ..< 3] {
    print(name)
}

4 數組的合並(如果兩個數組的類型一致,那麼可以相加進行合並)

//數組的合並
//如果兩個數組類型一致,那麼可以相加進行合並
let name1 = ["xiaofeng","it"]
let name2 = ["nb"]
let name3 = ["xiaofeng","it",18,18.9]

let names = name1 + name2
//let names1 = name1 + name3 類型不一致,不能相加合並

十一 字典

1 定義字典

—-> 1.1 定義不可變字典:使用let修飾
//不可變字典
let dict = [
    "name":"xiaofeng",
    "age":18,
    "height":180
]
//dict = ["career":"it"] 不可變字典,不能修改
—-> 1.2 定義可變字典:使用var修飾
//可變字典
var dict1 = [String:NSObject]()

2 對可變字典的基本操作(增刪改查)

—-> 2.1 增
//對可變字典的操作
var dict2 = [String:NSObject]()
//添加元素
dict2["name"] = "xiaofeng"
dict2.updateValue(18, forKey: "age")
—-> 2.2 刪
//刪除元素
dict2.removeValueForKey("age")
—-> 2.3 改
//修改元素
dict2["name"] = "xiao"
dict2
dict2.updateValue("xiaofeng", forKey: "name")
dict2
—-> 2.4 查
//獲取元素
dict2["name"]

3 遍歷子字典(三種)

—-> 3.1 第一種
//遍歷字典中的所有的key
for key in dict2.keys {
    print(key)
}
—-> 3.2 第二種
//遍歷字典中的左右的value
for value in dict2.values {
    print(value)
}
—-> 3.3 第三種
//遍歷字典中所有的key/value
for (key,value) in dict2 {
    print(key)
    print(value)
}

4 合並字典:相同類型也不可以合並

//合並字典-->相同類型的字典也是不能相加合並的
let dict3 = [
    "name":"xiaofeng",
    "age":18,
    "career":"it"
]
var dict4 = ["height":1.99,"phoneNume":"119"]
for (key,value) in dict3 {
    dict4.updateValue(value, forKey: key)
}
print(dict4)

十二 元組

1 例子:定義一組數據,用於描述個人信息

—-> 1.1 使用元組來描述
—-> 1.2 元組的基本使用(定義)
//使用元組
let infoTuple = ("xiaofeng", 20, 1.90)
infoTuple.0
infoTuple.1
infoTuple.2
—-> 1.3 給元組起別名
//給元組中每一個元素起別名
let infoTuple1 = (name : "xiaofeng", age : 20 , height : 1.90)
infoTuple1.name
infoTuple1.0
infoTuple1.age
infoTuple1.1
infoTuple1.height
infoTuple1.2
—-> 1.4 解釋別名含義
//別名就是元組對應標識符的名稱
let (name, age, height) = ("xiaofeng", 20, 1.90)
name
age
height

十三 可選類型(難點)

1 可選類型推出的目的:對nil值進行處理

2 定義可選類型

//定義可選類型
var name : Optional = nil

3 給可選類型賦一個具體值

//給可選類型賦一個具體的值
print(name)
name = "xiaofeng"
print(name)

4 從可選類型中取出具體的類型 強制解包: 可選類型 + !

//從可選的類型中取出具體的類型
//強制解包: 可選類型 + !
print(name!)

5 可選類型的註意: 如果可選類型中沒有值,那麼強制解包程序會崩潰

//可選類型的使用註意:如果可選類型中沒有值,那麼強制解包程序會崩潰
//建議:在對可選類型進行解包之前,先判斷可選類型是否等於nil
if name != nil {
    print(name!)
}
—-> 建議: 在對可選類型進行解包之前,先判斷可選類型是否等於nil

6 可選綁定

—-> 6.1 判斷name是否有值,如果沒有值,直接不執行{}
—-> 6.2 如果name有值,那麼系統會對name進行解包,並且將解包的結果賦值
if let tempName = name {
    print(tempName)

}

if let name = name {
    print(name)
}

十四 總結

1 今天為大傢帶來的是swift語言的簡單入門,裡面講的也還算詳細,希望能給一些想要學習的it從業者一點啟發吧.盡量的幫助大傢.明天還是會時時的更新有關swift的知識.最後如果大傢覺得我寫的博客還滿意的話,麻煩大傢關註我的官方博客,謝謝!!!!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *