swift基礎(chǔ)

1> 導(dǎo)入框架 :import UIKit
2> 定義標(biāo)識符: let/var let a:Int = 20
3> 語句結(jié)束時;可以省略
4> print(a)
常量變量
1> 在開發(fā)中,優(yōu)先使用常量(let). 只有發(fā)現(xiàn)標(biāo)識符需要修改時,再使用變量
// 目的: 防止在其它不希望修改的地方,不小心將值修改掉
2> 常量的本質(zhì): 指向的內(nèi)存地址不可以修改,但是可以通過內(nèi)存地址找到對應(yīng)的對象,之后修改對象內(nèi)部的屬性
let view : UIView = UIView()
view.backgroundColor = UIColor.blue
基本運算
將Int類型轉(zhuǎn)成Double: Double(標(biāo)識符)
邏輯分支 if
1> if后面的()可以省略掉
2> 沒有非0(nil)即真
邏輯分支 guard
條件不滿足時才執(zhí)行else里面的語句
guard age >= 18 else {
print("回家去")
return
}
邏輯分支 switch
1.switch的基本使用
1> switch()可以省略
2> case結(jié)束可以不加break
2.基本使用補充
1> case后面可以跟上多個條件
2> 如果希望產(chǎn)生case穿透,可以在case結(jié)束時fallthrough
3.可以判斷多種類型
1> 浮點型
2> 字符串
3> 區(qū)間類型
循環(huán)使用 for

  1. Swift中for循環(huán)現(xiàn)在只支持區(qū)間遍歷 0..<10/0...9
    2.在swift開發(fā)中,如果一個變量/常量暫停不會使用,那么可以使用_來代替
    循環(huán)使用 while
    1> while后面()可以省略
    2> 沒有非0(nil)即真 Bool(true/false)

字符串
1.字符串的定義
1> 不可變字符串的定義 let str = "Hello Swift"
2> 可變字符串的定義 var strM = "Hello World"
2.獲取字符串的長度 let length = str.characters.count
3.字符串的拼接
1> 字符串之間的拼接 let str3 = str1 + str2
2>字符串和其它標(biāo)識符之間的拼接 "(標(biāo)識符)"
let name = "why"
let age = 19
let infoStr = "my nams is (name), age is (age)"
3> 字符串拼接過程中格式化: String(format:"%d:%d", 參數(shù))
4.字符串的截取
1>方式一: 將String轉(zhuǎn)成NSString,再進(jìn)行截取(推薦)
let header1 = (urlString as NSString).substring(to: 3)
let range1 = NSMakeRange(4, 5)
let middle1 = (urlString as NSString).substring(with: range1)
let footer1 = (urlString as NSString).substring(from: 10)
2> 方式二: 直接使用String中方法,進(jìn)行截取. String.Index (不好用)
數(shù)組
1.數(shù)組的定義
1> 定義不可變數(shù)組 let array1 = ["why", "yz"]

    2> 定義可變數(shù)組 var arrayM = [String]()

2.對可變數(shù)組的基本操作
增刪改查 arrayM.append("why") arrayM.remove(at: 0)
arrayM[0] = "yz" let item = arrayM[1]
3.數(shù)組的遍歷
1> 獲取數(shù)組的長度 let count = array.count
2> 數(shù)組的遍歷(i/item/index-item)
獲得下標(biāo) for i in 0..<count
獲得下標(biāo) for item in array
既獲取下標(biāo)值,又獲取元素 for (index, item) in array.enumerated()
4.數(shù)組的合并知市,兩個數(shù)組中存放的是相同的元素直接合并 array1 + array2
字典
1.定義的定義
1> 不可變字典: let dict : [String : Any] = ["name" : "why", "age" : 18]

2> 可變字典: var dictM = [String : Any]()

2.對可變字典的基本操作
增刪改查 dictM["name"] = "why" dictM.removeValue(forKey: "height")
3.遍歷字典
1> 所有的key for key in dict.keys
2> 所有的value for value in dict.values
3> 所有的key/value for (key, value) in dict2
4.字典合并
dict1 可變 dict2 不可變
for (key, value) in dict2 {
dict1[key] = value
}

元組
使用元組保存信息(取出數(shù)據(jù)時,更加方便)
寫法1 let infoTuple0 = ("why", 18, 1.88) let tupleName = infoTuple0.0
寫法2 let infoTuple1 = (name : "why",age : 18, height : 1.88) infoTuple1.age
寫法3 let (name, age, height) = ("why", 18, 1.88) name
可選類型
在開發(fā)中,只有可選類型才能賦值為nil, 其它類型都不能賦值為nil
只要一個類型有可能為nil, 那么這個標(biāo)識符的類型一定是一個可選類型
1.定義可選類型 var name : String? = nil
2.給可選類型進(jìn)行賦值 name = "why"
3.從可選類型中取值
if let name = name {
print(name)
}

類型轉(zhuǎn)換

  1. as使用 (str as NSString).substring(to: 6)
  2. as?轉(zhuǎn)成可選類型 let name = tempName as? String
  3. as!轉(zhuǎn)成具體的類型 如果確定轉(zhuǎn)化成功,再用as!, 平時不建議
    函數(shù)
    內(nèi)部參數(shù): func sum(_ num1 : Int, _ num2 : Int) -> Int
    外部參數(shù): func sum(num1 : Int, num2 : Int, num3 : Int) -> Int
    可變參數(shù): func sum(_ nums : Int...) -> Int
    默認(rèn)參數(shù) func makeCoffee(coffeeName : String = "雀巢") -> String
    指針函數(shù)
    func swapNum(num1 : inout Int, num2 : inout Int) {
    let temp = num1
    num1 = num2
    num2 = temp
    }
    swapNum(num1: &m, num2: &n)
    枚舉
    創(chuàng)建枚舉1
    enum Direction : Int {
    case east = 0
    case west = 1
    case north = 2
    case south = 3
    }
    創(chuàng)建枚舉2
    enum Direction {
    case east, west, north, south

}
1>當(dāng)原始值的類型為整數(shù)時嫂丙,系統(tǒng)將隱式地對成員值賦值且值依次遞增1跟啤,若第一個成員值沒有設(shè)置原始值,則默認(rèn)為0腥光。
2>當(dāng)原始值的類型為String類型時,每個枚舉成員的隱式原始值是該成員的名稱

結(jié)構(gòu)體
1.定義結(jié)構(gòu)體
struct Location {
var x : Double
var y : Double
// 最普通的函數(shù): 該函數(shù)是沒有用到成員屬性
func test() {
print("結(jié)構(gòu)體中的test函數(shù)")
}
// 改變成員屬性 : 如果在函數(shù)中修改了成員屬性, 那么該函數(shù)前必須加上mutating
mutating func moveH(_ distance : Double) {
self.x += distance
}
// 給結(jié)構(gòu)體擴充構(gòu)造函數(shù)
// 1> 默認(rèn)情況下, 系統(tǒng)會為每一個結(jié)構(gòu)體提供一個默認(rèn)的構(gòu)造函數(shù), 并且該構(gòu)造函數(shù), 要 求給每一個成員屬性進(jìn)行賦值
// 2> 構(gòu)造函數(shù)都是以init開頭, 并且構(gòu)造函數(shù)不需要返回值
// 3> 在構(gòu)造函數(shù)結(jié)束時, 必須保證所有的成員屬性有被初始化
init(xyStr : String) {
// 20,30 --> ["20", "30"]
let array = xyStr.components(separatedBy: ",")
let item1 = array[0]
let item2 = array[1]
// ?? 判斷前面的可選類型是否有值
// 有值, 則解包, 沒有值,則使用后面的值
self.x = Double(item1) ?? 0
self.y = Double(item2) ?? 0
}
}
2.創(chuàng)建結(jié)構(gòu)體對應(yīng)的值 var center = Location(x: 20, y: 30)
3.系統(tǒng)結(jié)構(gòu)體的創(chuàng)建方式 let size = CGSize(width: 20, height: 20)
4.給結(jié)構(gòu)體擴充方法 center.test() center.moveH(20)
5.給結(jié)構(gòu)體擴充構(gòu)造函數(shù) Location(xyStr : "20,30")
**類似于class 但是class是類型引用痘番,而struct是值引用
struct沒有繼承的功能,class有繼承功能
swift在本質(zhì)上來說是面向協(xié)議的, 所以使用struct+protocol是構(gòu)成swift面向協(xié)議語言的基礎(chǔ)
義的對象類型 都可以改成結(jié)構(gòu)體去定義
模型 都可以改成機構(gòu)體
Swift 常用的 String, Array, Dictionary 都是 struct
結(jié)構(gòu)體封裝少量相關(guān)簡單數(shù)據(jù)值
數(shù)據(jù)需要被拷貝而不是被引用汞舱,不需要繼承的時候
類的使用
1.如何定義類
class Person {
// 如果屬性是值類型, 則初始化為空值
// 如果屬性是對象類型, 則初始化為nil值
var name : String = ""
var age : Int = 0
var view : UIView?
}
2.創(chuàng)建類的對象
let view = UIView()
類的構(gòu)造函數(shù)(KVC)
使用KVC條件
1> 必須繼承自NSObject
2> 必須在構(gòu)造函數(shù)中,先調(diào)用super.init()
3> 調(diào)用setValuesForKeys
4> 如果字典中某一個key沒有對應(yīng)的屬性, 則需要重寫setValue forUndefinedKey
class Person : NSObject {
var name : String = ""
var age : Int = 0
var height : Double = 0
init(dict : [String : Any]) {
super.init()
setValuesForKeys(dict)
}
override func setValue(_ value: Any?, forUndefinedKey key: String) {}
}
類的析構(gòu)函數(shù) -相當(dāng)dealloc
class Person {
var name : String = ""
var age : Int = 0
// 重寫析構(gòu)函數(shù), 監(jiān)聽對象的銷毀
deinit {
print("Person --- deinit")
}
}
var p : Person? = Person()
p = nil
循環(huán)引用解決方案
OC中表示弱引用 __weak/__unsafe_unretained(野指針錯誤)
Swift中表示弱引用 weak/unowned(野指針錯誤)
// unowned 不能用于修飾可選類型
unowned var owner : Person = Person()
可選鏈
當(dāng)類中包含的元素特別多時昂芜,可以把里面的元素單獨出類來包含,取值時可使用可選鏈
1> 從可選鏈中進(jìn)行取值?.
2> 給可選鏈進(jìn)行賦值
3> 可選鏈調(diào)用方法

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末良漱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子矾兜,更是在濱河造成了極大的恐慌患久,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件返帕,死亡現(xiàn)場離奇詭異篙挽,居然都是意外死亡,警方通過查閱死者的電腦和手機嫉髓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門算行,熙熙樓的掌柜王于貴愁眉苦臉地迎上來梧油,“玉大人州邢,你說我怎么就攤上這事∑澹” “怎么了呀枢?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長琅拌。 經(jīng)常有香客問我摘刑,道長,這世上最難降的妖魔是什么枷恕? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮未玻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绰疤。我一直安慰自己舞终,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布余爆。 她就那樣靜靜地躺著夸盟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪上陕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天亚隅,我揣著相機與錄音庶溶,去河邊找鬼。 笑死偏螺,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的酿联。 我是一名探鬼主播凉夯,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了休傍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤人柿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后江咳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哥放,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年踩身,在試婚紗的時候發(fā)現(xiàn)自己被綠了社露。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡附鸽,死狀恐怖瞒瘸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情挨务,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布丁侄,位于F島的核電站朝巫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏劈猿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一筷黔、第九天 我趴在偏房一處隱蔽的房頂上張望仗颈。 院中可真熱鬧,春花似錦、人聲如沸订歪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽眼虱。三九已至,卻和暖如春蒙幻,著一層夾襖步出監(jiān)牢的瞬間胆筒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工抒和, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人摧莽。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓顿痪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親征懈。 傳聞我的和親對象是個殘疾皇子揩悄,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容