篇幅比較長M瓴小!横漏!如果真心想學習谨设,還是找個安靜的晚上,慢慢閱讀缎浇,慢慢體會swift的輕妙之處扎拣,這里附上本人的github中的demo:https://github.com/tanzhiwen/SwiftTips
歡迎指導學習!K囟濉二蓝!
目錄
01-變量和常量
02-運算符
03-可選項
04-條件語句
05-循環(huán)
06-字符串
07-元組
08-數(shù)組
09-字典
10-對象和類
11-枚舉
12-屬性
13-下標腳本
01-變量和常量
1.1基本數(shù)據(jù)類型
1.整數(shù):Int
2.浮點數(shù): Double表示64位浮點數(shù),Float表示32位浮點數(shù)
3.布爾類型: Bool,布爾值只有 true 和 false 兩種
4.字符串: String
5.字符: Character
1.2變量和常量
1.變量:值能被修改,var 修飾
2.常量:值不能被修改,let 修飾
var a =20
a =10
let b =20
//b = 10常量不能修改:error:'b' is a 'let' constant
1.會自動推導聲明的變量或常量的屬性
2.使用【option + 單擊】鍵查看屬性的類型
// 1.自動推導類型
let str ="ningcol"
let intValue =10
let floatValue =1.2
// 2.指定數(shù)據(jù)類型
let doubleValue:Double =10
02-運算符
1基本運算符
var a = 5
let b = 3
// 1.賦值運算符
let c = b
// 2.加減乘除
1 + 2
5 - 3
2 * 3
10.0 / 2.5
2任何情況下都不會做隱式轉(zhuǎn)化,必須以相同類型進行計算
let num1 =1
let num2 =2.2
let num3 = Double(num1) + num2
3必須要顯式類型的轉(zhuǎn)化
let j =2.2
let i:Float =1.2
i + Float(j)
4.求余運算
a % b
5負號運算
let minusB = -b
6.組合賦值運算
a +=2
7.比較運算
1==1
2!=1
2>1
1<2
1>=1
2<=1
8.三目運算
let d = a > b ?100:200
9.空合運算
1.空合運算符( a ?? b )將對可選類型 a 進行空判斷(可選項內(nèi)容詳見:04-可選項)
2.如果 aName 為 nil亡笑,則執(zhí)行??后面的侣夷,否則執(zhí)行aName(注意??兩邊都有空格)
var aName: String? ="ningcol"
//var aName: String? = nil
let bName = aName ??"aNameIsNil"
10.區(qū)間運算
1.閉區(qū)間運算符( a...b )定義一個包含從 a 到 b (包括 a 和 b )的所有值的區(qū)間
2.半開區(qū)間( a..
for index in 1...5 {
print(index)
}
for index in 1..<5 {
print("半開區(qū)間:\(index)")
}
11.邏輯運算
1.邏輯非(!a):布爾值取反
2.邏輯與( a && b ):只有 a 和 b 的值都為 true 時,整個表達式的值才會是 true
3.邏輯或( a || b ):兩個邏輯表達式的其中一個為 tru e 仑乌,整個表達式就為 true
let allowedEntry =false
let enteredDoorCode =true
if !allowedEntry {
print("ACCESS DENIED")
}
if allowedEntry && enteredDoorCode {
print("Welcome!")
}else{
print("ACCESS DENIED")
}
if allowedEntry || enteredDoorCode {
print("Welcome!")
}else{
print("ACCESS DENIED")
}
03-可選項
1.可選值
可選值:可以有值,可以為nil(用 ? 表示可選值)
// URL 為可選項
let URL = NSURL(string:"http://www.baidu.com/")
// str 為可選項
var str: String? ="ningcol"
// var 的可選項默認為 nil
var a:Int?
print(a)
2 if let 語句
// if let : 確保 myUrl 有值百拓,才會進入分支iflet myUrl = URL{
print(myUrl)
}
var aName: String? ="ningcol"
// var aName: String? = nil
var aAge: Int? =18
iflet name = aName,let age = aAge {
print(name + String(age))
}
// 可以對值進行修改
ifvar name = aName,let age = aAge {
name ="lisi"
print(name + String(age))
}
3.guard let
1.guard let 和 if let 相反。表示一定有值,沒有就直接返回
2.降低分支層次結(jié)構(gòu)
3.playground不能展示效果晰甚,要在函數(shù)中展示
// 創(chuàng)建一個類(詳見:10-對象和類)
classtest{
func demo(){
let aNick: String? ="ningcol"
let aAge: Int? =10
guard let nick = aNick ,let age = aAgeelse{
print("nil")
return
}
print("guard let: "+ nick + String(age))
}
}
var t = test()
t.demo()
4.強制解包
// 創(chuàng)建一個數(shù)組(詳見:08-組數(shù))
var dataList:[String]?
dataList = ["zhangsan","lisi"]
/*********************************************************************
1.dataList? 表示 datalist 可能為 nil
2.如果為 nil, .count 不會報錯衙传,仍然返回 nil
2.如果不為 nil,.count執(zhí)行厕九,返回數(shù)組元素個數(shù)
4. ?? 空合運算符(詳見:02-運算符)
*********************************************************************/
let count = dataList?.count ??0
// 表示 datalist 一定有值,否則會出錯蓖捶!
let cou = dataList!.count
04-條件語句
4.1.if語句
/*********************************************************************
1.必須要有大括號
2.沒有"非零即真"的概念,只有ture/false
*********************************************************************/
let num =20
ifnum >10{
print("大于10");
}else{
print("小于或等于10")
}
4.2switch
/*********************************************************************
1.值可以是任何類型
2.作用域僅在 case 內(nèi)部
3.不需要 break
4.每一個 case 都要有代碼
*********************************************************************/
let name ="nick"
switchname {
case"nick":
let age =18
print("one\(age)")
case"fil":
print("two")
case"Davi":
print("three")
case"":break//相當于有一行代碼
case"tom","ningcol":
print("tomAndNingcol")
default:
print("other")
}
switch分支使用范圍
let count = 3_000
var naturalThings:String
switchcount{
case0:
naturalThings ="數(shù)字0"
case1...3:
naturalThings ="數(shù)字1-3"
case4...9:
naturalThings ="數(shù)字4-9"
case10...99:
naturalThings ="數(shù)字10-99"
case1000...9999:
naturalThings ="數(shù)字1000-9999"
default:
naturalThings ="數(shù)字9999以上"
}
print(naturalThings);
//輸出:數(shù)字1000-9999
5.1 for循環(huán)
// 去掉了C語言風格的循環(huán)( ..< 區(qū)間運算符,詳見:02-預算符)
foriin0..<10{
print(i)
}
print("----步長循環(huán)-----")
// 遞增(步數(shù)為2)
foriinstride(from:0, to:12, by:2) {
print(i)
}
print("開始遞減")
// 遞減
foriinstride(from:12, to:0, by: -2) {
print(i)
}
print("----反序循環(huán)----")
let range =0...10
// 反序循環(huán)
foriinrange.reversed(){
print(i)
}
5.2循環(huán)結(jié)構(gòu)while
/*
while語句扁远,只有當 ip<5 為 false 才跳出 while語句
*/
varip = 0
while (ip<5){
print("ip=\(ip)")
ip += 1
}
//運行結(jié)果
//ip=0
//ip=1
//ip=2
//ip=3
//ip=4
/*
repeat-while 循環(huán)俊鱼,不管pa是多少,先執(zhí)行一次畅买,在判斷并闲,為false 跳出 do while語句
*/
varpa = 5
repeat{
print("pa=\(pa)")
pa += 1
}while (pa<5)
//運行結(jié)果
//pa=5
06-字符串
1.String 結(jié)構(gòu)體,效率比對象高谷羞,一般推薦使用帝火,支持遍歷
2.NSString 繼承NSObject
var str:String ="Hello你好"
//var st:NSString = "hah"
// 字節(jié)數(shù)量
print(str.lengthOfBytes(using: .utf8))
// 字符串長度
print(str.characters.count)
forainstr.characters{
print(a)
}
// 字符串拼接
let name:String? ="老王"
let age =80
let location ="隔壁"
print(location + (name ??"a") + String(age) +"歲")
//'\(變量名)' 會自動轉(zhuǎn)換拼接
print("\(location)\(name)\(age)歲")
let rect = CGRect(x:0, y:0, width:100, height:100)
print("\(rect)")
// 格式字符串
let h =13
let m =5
let s =9
let timeStr = String(format:"%02d:%02d:%02d", arguments: [h,m,s])
let timeStr1 = String(format:"%02d:%02d:%02d", h,m,s)
1.在Swift中使用 Range,最好把 String 改成 NSString
2.str.substring(with: Range) 很麻煩
3. '值 as 類型' 作為類型轉(zhuǎn)換
(str as NSString).substring(with: NSMakeRange(2,5))
let index = str.index(str.startIndex, offsetBy:3)
str.substring(from: index)
// "123"只是用來取到索引位置
str.substring(from:"123".endIndex)
print("****\(str.substring(from: "123".endIndex))")
str.substring(to: index)
String 使用 Range
let myRange = str.startIndex..
str.substring(with: myRange)
let myRange1 = index..
str.substring(with: myRange1)
07-元組
// 元組的元素個數(shù)固定,不允許增加犀填、刪除
var stu = (404,"小白")
// 支持嵌套
var msg = ("基本信息", ("李剛",34))
print(stu)
print(msg)
var (a,b) = stu
print(a,b)
//如果僅需要元組中的個別的值蠢壹,可以使用"_"的方式來處理不需要的值
let (c,_) = stu
print(c)
//通過序號獲得元組的值
print("status is \(stu.0)")
// 可以修改
stu.0=500
let message = (status:100, msg:"哈哈")
print("message is \(message.status)and \(message.msg)")
08-數(shù)組
8.1?數(shù)組定義
使用let修飾的數(shù)組是不可變數(shù)組
使用var修飾的數(shù)組是可變數(shù)組
//方括號 [] 來創(chuàng)建數(shù)組
let array1 = ["zhangsan","lisi"]
let array2 = [1,2,3,4,5]
var array3:[Int]// 定義一個數(shù)組(沒有初始化)
array3 = [Int]()//初始化
//聲明空數(shù)組,(必須初始化)
let array4 = [String]()// 等價上面兩行代碼
let array5:[Any] = ["zhangsan","lisi",20]
var arr3 = [Double](repeating:0.0, count:3)//[0.0, 0.0, 0.0]
var arr4 = Array(repeating:3.0, count:3)//[3.0, 3.0, 3.0]
var arr: [String] = ["Alex","Brian","Dave"]
print(arr.count)
print(arr[0])
8.2數(shù)組遍歷
// forin方式
for name in array1{
print(name)
}
// 遍歷數(shù)組
for i in 0..
print(array2[i])
}
//區(qū)間遍歷
for item in array2[0..<2] {
print("item\(item)")
}
// 同時遍歷下標和內(nèi)容
print("=====同時遍歷下標和內(nèi)容=====")
for e in array2.enumerated(){
print(e)
//offset 下標element 值
print("元組 \(e.offset) \(e.element)")
}
//下標和值同時遍歷
for(n, s) in array2.enumerated() {
print(n,"===", s)
}
// 反序遍歷
for a in array2.reversed(){
print(a)
}
// 遍歷下標和數(shù)值 反序
for(xxx,ooo)in array2.enumerated().reversed() {
print(xxx,"==",ooo)
}
未完待續(xù)。九巡。图贸。
如果你堅持看到這里就可以走向知識的大門 哈哈!C峁恪求妹!