Swift基礎知識,快速掌握

swift的語法確實高端,用習慣了編程特別順手。

swift中的變量分為兩類,變量(var)和常量(let),常量聲明時必須有一個初值,變量聲明時不必有初值,但要指定類型。

1.Int 和 Float

let a:Int = 1

let b:Float = 1.1

let var

let str = "hello"

str.characters.count ?// 字符串長度

str.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)

1.2大小寫

str.uppercaseString?

str.lowercaseString

let str2 = String(format: "%02d:%03d", 1,2)

let str3 = String(format: "%02d:%02d", arguments: [1,2])

str2.substringToIndex(<index: Index) // 字符串的拼接,剪切等

字符串的其他操作全部轉化為NSString再去操作

1.3轉換

let str4:NSString = str2 as NSString? //str4是str2轉化為NSString的值

2數組 Array

2.1不可變數組

let array1 = ["A","2","3","4"]

let array2:Array = ["A","2","3","4"]

let array3:[String] = ["A","2","3","4"]

initWith/init在swift里面全部轉化成 ( )

let array4 = [String]()? // 指定是String類型數組

元素個數 .count 來訪問

數組遍歷 for-in(要明確指出數組的)

for temp in array3 as [String]{

print(temp.characters.count)

print(temp)

}

元組遍歷? **針對下標的時候 推薦**

for (index,value) in array3.enumerate()

{

print("index = \(index), value = \(value)")

}

2.2可變數組

var mutableArray = [String]()

mutableArray.append("hello")

mutableArray.append("world")

mutableArray.append(23)

mutableArray.removeAll()

mutableArray.removeAll(keepCapacity: true)

mutableArray.removeFirst(0)

print(mutableArray)

3.字典? Dictionary

3.1不可變字典

let dict = ["key1":"value1", "key2":"value2", "key3":"value3"]

print(dict)

通過key值訪問value值

print(dict["key1"])

字典遍歷不用在dict后面加.enumerate()

for (key,value) in dict

{

print("key = \(key), value = \(value)")

}

3.2可變字典

var dict3 = ["key":"value"]

3.3合并字典

for (tempKey,tempValue) in dict{

如果key存在的則是一個更新鍵值對操作,否則是一個增加鍵值對操作

dict3[tempKey] = tempValue

}

print(dict3)

4 .可選類型

如果一個值可能為nil,那么這個值就是可選類型,用?標識

Optional包圍的就是一個可選類型 (打印出來有Optional)

可選類型不能直接使用,必須進行強制解包,!強制解包,對nil強制解包會造成崩潰

unexpectedly found nil while unwrapping an Optional value 出現這個錯誤的時候就是對一個空的可選類型進行強制解包 ,不能對空的可選類型進行強制解包!

(a1 ?? "234") 對可選類型進行判斷,如果可選類型值為nil,則給它一個默認值("23456")

var a1:String?

a1 = "123"

print(a1)

print(a1!)

print(a1!.characters.count)

print((a1 ?? "23456").characters.count)

5.條件分支

if 條件語句()可以省略, {} 不能省略

if 沒有非零即真的概念,只有true false的兩種情況

let tempValue = 10

if tempValue > 5{

print("tempValue > 5")

}

可選類型的條件分支

let str:String? = "hello"

(1) if-let是對可選類型的判斷,如果可選類型為nil,則不執行代碼塊。如果不為空則用tempStr來接受此刻這個可選類型的解包后的值

if let tempStr = str{

print(tempStr)

}

(2) if-let-where 跟if-let相似,where是對前面定義的這個局部變量再做一層判斷

if let tempStr = str where tempStr.characters.count > 2 {

print("tempStr.length = \(tempStr.characters.count)")

}

(3) guard-let-else (守護)

如果可選類型str為nil,則執行code代碼塊,最后一定要return,如果不為nil則強制解包后的值賦值給tempStr,這樣在{}外面就可以使用tempStr

guard let tempStr = str else {

code

return

}

tempStr....

6.switch

* switch 不局限判斷整型,可以是浮點型,也可以是字符串等等

* switch 后面的小括號可以省略,大括號不能省略

* case 后面至少要有一條執行語句!!并且case后面的大括號可以省略,break可以不寫,不會造成貫穿

* default一定要寫,并且只能寫在最后

let f = 3.2

switch f {

case 3.0:

print("==3.0")

case 3.1:

print("==3.1")

case 3.2:

print("==3.2")

default:

print("unknow")

}

該寫法在swift2.2的時候被廢棄掉了

for (var i = 0 ; i < 5; i++){}

for var i = 0; i < 5; i+1 { print(i) }

用下面這個

for i in 0..<5 { // 0..<5 --- [0,5) 0...5 --- [0,5]

? ? print("i=\(i)")

}

7.枚舉(枚舉值可以關聯浮點,字符串等,沒有默認的關聯值)

關聯如果是Int,會默認的遞增上去;如果不是Int類型,必須每個枚舉值都關聯上對應的值

enum Month:Float {

case January = 11.2

case February = 12.2

case March = 13.6

case April = 14.2

case May = 15.4

case June = 17.6

}

如果明確指出一個變量/常量是屬于哪種枚舉類型的話,可以直接用 .枚舉值 來賦值,否則就用 枚舉類型.枚舉值

let month = Month.January

let month2:Month = Month.January // let month2:Month = .January

var month1 = Month.January

month1 = .February

switch month{

case .January:

print("hashValue = \(month.hashValue),rawValue = \(month.rawValue)")

print(month)

case .February:

print("hashValue = \(month.hashValue),rawValue = \(month.rawValue)")

print(month)

case .March:

print("hashValue = \(month.hashValue),rawValue = \(month.rawValue)")

print(month)

case .April:

print("hashValue = \(month.hashValue),rawValue = \(month.rawValue)")

print(month)

default :

print("hashValue = \(month.hashValue),rawValue = \(month.rawValue)")

print("noValue")

}

8.懶加載

* lazy var 變量名:變量類型 = {

*? ? ? code

*? ? ? return

*? }( )

lazy var btn:UIButton = {

var tempBtn = UIButton(type: UIButtonType.ContactAdd)

tempBtn.frame = CGRectMake(90, 100, 50, 50)

tempBtn.backgroundColor = UIColor.cyanColor()

return tempBtn

}()

9.異常捕獲

let path = NSBundle.mainBundle().pathForResource("iOS", ofType: "json")

let data:NSData = NSData(contentsOfFile: path!)!

do{

let rootArray = try NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers) as! [[String:String]]

print(rootArray)

}catch{

// 異常捕獲,序列化出錯的時候就自動來到這里

print("error")

}

10.閉包

{

(參數名:參數類型) -> 返回值類型

in

code,執行代碼

}

無參無返

let closure = {

()->()? // ()->void? // ()? 3種

in

print("無參無返")

}

closure()

有參無返

let closure1 = {

(str:String,str1:String)->Void

in

print("有參無返\(str),\(str1)")

}

closure1("hello","world")

無參有返

let closure2 = {

()->String

in

print("無參有返")

return "無參有返"

}

print(closure2())

有參有返

let closure3 = {

(str:String,str1:String)->String

in

print("有參有返\(str),\(str1)")

return str+str1

}

print(closure3("1","2"))

練習

定義一個方法 (輸入參數color,frame,closure(是將剛才的color,frame當做參數,返回一個UIView),返回一個UIView)

func creatUIView(color:UIColor,frame:CGRect,closure:(tempColor:UIColor,tempFrame:CGRect)->UIView)->UIView{

let view:UIView = closure(tempColor: color, tempFrame: frame)

return view

}

調用函數:

let view = creatUIView(UIColor.redColor(), frame: CGRectMake(100, 100, 100, 100)) { (color, frame) -> UIView in

let tempView = UIView(frame: frame)

tempView.backgroundColor = color

return tempView

}

view.addSubview(view)

11.函數

func 方法名(參數列表)-> 返回值類型{

code

}

無參無返

func func1()->Void{

print("無參無返")

}

有參無返

func func2(str:String)->Void{

print("\(str)")

}

有參有返

func func3(str:String)->String{

return str+"有參有返"

}

無參有返

func func4()->String{

return "無參有返"

}

12.字典轉模型

class Person: NSObject {

字典轉模型,模型中如果有基本數據類型的話,基本數據類型不可以為可選類型,否則在KVC賦值中會找不到對應的key值.如果為可選類型的話應該給初始值

var name:String?

var age:Int = 0

var gender:String?

字典轉模型

init(dict:[String:AnyObject]) {

super.init()

setValuesForKeysWithDictionary(dict)

}

this class is not key value coding-compliant for the key age.'出現這個錯誤一般都是字典轉模型的時候出錯

如果自定義了初始化方法并且沒有實現系統默認的初始化方法,那么外界訪問不到該類的默認初始化方法,想要訪問的話必須手動實現

override init() {

super.init()

}}

13.創建單例

class SingleDog: NSObject {

var name:String?

單例第一種寫法

? ? static var shareSingleDog:SingleDog = {

? ? ? ?let instance = SingleDog()

? ? ? ? return instance

? ? }()

單例第二種寫法

static let instance = SingleDog()

static func shareSingleDog()->SingleDog{

return instance

}

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,002評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,400評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,136評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,714評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,452評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,818評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,812評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,997評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,552評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,292評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,510評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,035評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,721評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,121評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,429評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,235評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,480評論 2 379

推薦閱讀更多精彩內容

  • 雖然Swift這門語言還很年輕,但是不可否認的是Swift很強大,也很便捷,但是習慣于OC編程之后再去寫swift...
    One蘋果OneDay閱讀 696評論 0 2
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile麗語閱讀 3,854評論 0 6
  • 首先創建swift工程 選中Command Line Tool, 點擊Next 語言欄選中Swift 接下來就創建...
    ZYZZZ閱讀 392評論 0 3
  • swift基本使用 swift語句后面沒有分號,不過就算不小心加了分號也不會報錯,但是為了語法的規范不能加分號 引...
    黃泉殤閱讀 441評論 0 0
  • Swift 介紹 簡介 Swift 語言由蘋果公司在 2014 年推出,用來撰寫 OS X 和 iOS 應用程序 ...
    大L君閱讀 3,265評論 3 25