Swift - 基本語法(一)

寫在前面

1.Swift保持了OC的參數(shù)命名系統(tǒng),但是在語法上更簡潔,可讀性更強(qiáng) 代碼更容易被維護(hù)
2.Swift安全性更高
3.Swift在編譯和運(yùn)行上都經(jīng)過了更精確的優(yōu)化 所以相比更快
....

一.常量和變量

常量用let來表示,一旦賦值就不能再被改變
變量用var來表示,賦值之后還可以再改變
如:
let number1 = 100
var number2 = 99
Swift是一門類型安全(type safety)的語言,雖然沒有確定變量類型 其實(shí)已經(jīng)有類型了

Q:Swift如何來顯式聲明類型呢?

var str:String // 表示顯式聲明了str是String類型的變量
str = "Sunshine"

var num1, num2, num3:Double // num1, num2, num3都是Double類型的變量
num1 = 1.0
num2 = 2.0
num3 = 3.0

// Double是64位的浮點(diǎn)數(shù),F(xiàn)loat是32位的浮點(diǎn)數(shù),一般來說Double精確到小數(shù)點(diǎn)后面15位,F(xiàn)loat精確到小數(shù)點(diǎn)后面6位

let binaryInt:Int = 0b1001 // 0b:二進(jìn)制的數(shù)據(jù)前綴

Q:強(qiáng)制類型轉(zhuǎn)換?
強(qiáng)制類型轉(zhuǎn)換:在需要轉(zhuǎn)換的變量之前加上(需要轉(zhuǎn)換的類型),轉(zhuǎn)換的類型需要用()

let number_a:Int = 3
let number_b:Double = 0.1415926
let pi:Double = (Double)(number_a) + number_b

Q:字符串拼接?

let 姓名:String = "Sunshine"
姓名 + ",你好!" // Sunshine,你好!

二.布爾類型和if語句

布爾值用truefalse來表示,全是小寫
if語句的{}必不可少,即使{}里面只有一句話也不能省略
Swift里面沒有把非0的值作為真的這種說法

let imtruevar = true
let imfalsevar = false
if imtruevar {
    print("I am true")
}else {
    print("I am false")
}

if 3 + 4 == 7 {
    print("3 + 4 =7")
}else {
    print("I am false")
}

三.Swift元組 Tuples

元組:將多個(gè)不同的值集合成一個(gè)數(shù)據(jù) 如(true,"Sunhsine","女"),它是Swift新引進(jìn)的一種新的數(shù)據(jù)類型
元組的特點(diǎn):1 - 可以有任意多個(gè)值
2 - 不同的值可以是不同的類型

// 第一種寫法
let tuplesregisterResult = (true, "Sunshine", "女")
let (isRegisterSucc, name, sex) = tuplesregisterResult
isRegisterSucc // true
name // Sunshine
sex // 女

// 第二種寫法
let tuplesregisterResult = (isRegisterSucc:true, name:"Sunshine", sex:"女")
tuplesregisterResult.isRegisterSucc // true
tuplesregisterResult.name // Sunshine
tuplesregisterResult.sex // 女

在提取元組數(shù)據(jù)時(shí)可能對某部分?jǐn)?shù)據(jù)不關(guān)心,可以使用下劃線_忽略部分?jǐn)?shù)據(jù)
如:

let loginResult = (true, "sunshine")
let (isloginsucc, _) = loginResult
if isloginsucc {
    print("登錄成功")
}

Q:元組如何顯式的聲明數(shù)據(jù)類型?
,隔開,聲明每個(gè)變量的類型,如:
let connectResult:(Int, String) = (404, "Not Found")

四.可選型 Optionals

Optionals:可選值
1 - 或者是一個(gè)值 或者是沒有值
2 - 沒有值時(shí)為nil
Q:如何顯式的將一個(gè)變量聲明成可選值?
var imoptionalvariable:Int?

let userInput = "sunshine";
var age = Int(userInput) // 把userInput轉(zhuǎn)化為Int
// age! 表示age一定是有值的 就用!
if age != nil {
//    print("your age is \(age!)")
//    print("your age is" + String(age)) // 強(qiáng)制類型轉(zhuǎn)換不能針對可選值 所以這樣寫會(huì)出錯(cuò)
    // age! 可以叫做是可選型的解包
     print("your age is" + String(age!))   
}else {
    print("inpunt is not avariable")
}

let string_a:String! = "Sunshine" // 表示在聲明的時(shí)候就明確表示string_a是有值的。

五.基礎(chǔ)運(yùn)算符

let a = 10
let b = 5
var c = 0

a + b
a - b
a * b
a / b
a % b
// ? : :  //  條件運(yùn)算符

//  這也是Swift更安全的一個(gè)體現(xiàn)
Int.max + 1 // 報(bào)錯(cuò) 溢出的錯(cuò)誤
Int.min - 1 // 報(bào)錯(cuò)
// 其他運(yùn)算符:a === b a !== b

六.聚合運(yùn)算符

// a ?? b  等價(jià)于: a != nil ? a! : b
// 聚合運(yùn)算符有兩個(gè)要求: 1 - a必須是可選類型  
                      2 - b的類型必須是a相同的a必須是可選類型
var userName:String?
userName = "sunshine"
if userName != nil {
    print("Hello my name is \(userName)")
}else {
    print("Hello guest")
}

// 等價(jià)于下面的寫法
let outputName:String = userName != nil ? userName! : "guest"
print("Hello" + outputName)

// 等價(jià)于下面的第一種寫法
let outputName:String = userName ?? "guest"
print("Hello" + outputName)

七.區(qū)間運(yùn)算符和for - in循環(huán)

// 閉區(qū)間[a, b]  等價(jià)于  a...b
// 前閉后開區(qū)間[a,b)  等價(jià)于  a..<b
for index in 1...10 {
    index // index 是個(gè)常量
}

八.邏輯運(yùn)算符

!a
a && b
a || b

九.String和Character

let str1 = "I am a immutable string" // 表示不可變字符串
var str2 = "I am mutable string"http:// 可變字符串

str2 = "Sunshine"
str2 += ",你好!" // 打印的結(jié)果是:Sunshine,你好

Q:如何定義一個(gè)空字符串?

var empty_str1 = ""
var empty_str2 = String()
empty_str1 += "Sunshine" // empty_str1變成Sunshine
empty_str1.isEmpty // 來判斷當(dāng)前字符串是否為空

使用for - in循環(huán)循環(huán)來遍歷字符串

for c in empty_str2 {
    print(c) // 會(huì)打印出字符串中的每個(gè)字符
}

聲明一個(gè)Character的數(shù)據(jù)類型

var ch:Character = "s" // 此時(shí)的ch就是Character的數(shù)據(jù)類型 里面只能有一個(gè)字符
empty_str2.append(ch)
empty_str2.appending("hello")
PS:允許兩個(gè)字符串相加 但是不允許字符串和Character類型的相加

計(jì)算字符串的長度
str1.characters.count

十.String的基本操作

字符串插值:(要插入的字符串)

var inter_str1 = "Sunshine"
var inter_str2 = "你好"
print("\(inter_str1),\(inter_str2)")// 打印結(jié)果:Sunshine,你好

字符串的比較

let com_str1 = "abc"
let com_str2 = "abc"
let com_str3 = "accd"
let com_str4 = "abcd"
com_str1 == com_str2 // 結(jié)果為true
// 使用字典序來比較字符串
com_str1 < com_str3 // 結(jié)果為true
// 注意:使用字典序是不用看它的長度的
com_str3 > com_str4 // 結(jié)果為true

字符串的前綴和后綴

// hasPrefix:是否有前綴
// hasSuffix:是否有后綴

let arrs = ["第一章:1.1","第一章:1.2","第一章:1.3","第二章:2.1","第二章:2.2","第二章:2.3","第二章:2.4","第二章:2.5","第三章:3.3","第三章:3.3","第三章:3.3"]
var count = 0
for name in arrs {
    if name.hasPrefix("第二章") {
        count += 1 // count++ 在Swift3之后已經(jīng)被廢棄 不能使用
    }
}
print("第二章總的章數(shù) - \(count)") //  打印結(jié)果:第二章總的章數(shù) - 5
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 關(guān)于 Swift 重要這個(gè)文檔所包含的準(zhǔn)備信息, 是關(guān)于開發(fā)的 API 和技術(shù)的。這個(gè)信息可能會(huì)改變, 根據(jù)這個(gè)文...
    無灃閱讀 4,624評論 1 27
  • 如果創(chuàng)建的是 OS X playground 需要引入 Fundation 如果我們想創(chuàng)建 iOS playgro...
    kled_net閱讀 522評論 0 0
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 4,194評論 1 10
  • 人需要一個(gè)個(gè)夠大夠高的舞臺去歷練和展示自我。如美國普林斯頓大學(xué)動(dòng)物劉錦程,對外漢語教師都可以做到非常成功的程度。
    自由之我閱讀 221評論 0 0
  • 當(dāng)我得知自己可以去臺灣旅游的時(shí)候內(nèi)心是狂喜的。我第一時(shí)間想到的不是別的,就是美食。多少年,當(dāng)身邊去過臺灣的朋友提起...
    空想之道閱讀 646評論 0 0

友情鏈接更多精彩內(nèi)容