Swift

學(xué)習(xí)Swift,我為啥子學(xué)習(xí)Swift,因?yàn)槲矣刑O果電腦啊,哇哈哈哈哈;

開玩笑的,不過有蘋果電腦對(duì)學(xué)習(xí)iOS開發(fā)真的挺重要的。可能蘋果生態(tài)里面這兩個(gè)也是父類跟子類的關(guān)系吧。

Swift學(xué)習(xí)一開始接觸的是語法,然后是基本的開發(fā)控件,我先講這兩個(gè),剩下的,路很長,共勉。(哈哈哈,這是朱老大經(jīng)常跟我講的,以后再說吧)

語法的內(nèi)容我就不多說了,其實(shí)很多,但是也沒那么多。接下來我就放一個(gè)基本的語法的鏈接,這些是我從一個(gè)軟件上整理下來的,挺實(shí)用。

鏈接:https://pan.baidu.com/s/1RbrVzb7JhbaM-rSasY8a2w 密碼:o4vt

(pages的哦,這個(gè)只是參考的學(xué)習(xí)資料)

接下來上代碼:

//

//? ViewController.swift

//? 002-第一個(gè)應(yīng)用程序

//

//? Created by 曹杰 on 2018/5/16.

//? Copyright ? 2018年 曹杰. All rights reserved.

//

import UIKit

/*

?1:OC [[UIView alloc] initWithFrame:xxx]

?Swift UIView(XXX:)


?類名() == alloc/init? 等價(jià)

?2.類方法? OC? [UIColor redColor]

? ? ? ? ? Swift UIColor.red


?3:訪問當(dāng)前對(duì)象的屬性,可以不使用‘self’

?建議:都不用,在編譯器提示的時(shí)候再添加,會(huì)對(duì)‘語境’有更好的體會(huì)

?原因:閉包(提前準(zhǔn)備好的代碼,在需要的時(shí)候執(zhí)行):(類似于 OC block),需要使用 self.


?4:沒有分號(hào);

?“;”目的分割語句的,在Swift中,默認(rèn)不需要


?5:枚舉類型、

?OC UIButtonTypeContactAdd

?Swift? '.'contactAdd


?6:監(jiān)聽方法

OC @selector

?Swift? #selector 如果帶參數(shù),不需要使用“:”

?2.0


?7:調(diào)試

?OC? ? NSLog

?Swift print

?-沒有時(shí)間

?-效率比NSLog要高

?跟蹤函數(shù)的時(shí)候

?OC __FUNCTION__

?Swift #function



?*/

classViewController:UIViewController{

? ? ///從Xcode 8.0 開始,目前所有的插件都無法工作!

? ? ///option + cmd + /增加文檔注釋

? ? overridefuncviewDidLoad() {

? ? ? ? super.viewDidLoad()



? ? ? ? //預(yù)編譯指令

? ? ? ? //MARK:- 視圖生命周期

? ? ? ? //MARK:- 視圖加載完成

? ? ? ? //1.創(chuàng)建試圖

? ? ? ? let? v =UIView(frame:CGRect( x:0,y:20,width:100,height:100))


? ? ? ? //設(shè)置背景顏色

? ? ? ? //color+ 回車

? ? ? ? v.backgroundColor=? colorLiteral(red: 1, green: 0.0581554151, blue: 0, alpha: 1)? ? ? ? ? ? ? //TODO: 設(shè)置新的顏色



? ? ? ? letiv =UIImageView(image:? imageLiteral(resourceName: "1吉他大道"))? ? ? //FIXME: 應(yīng)該更改頭像

? ? ? ? iv.center = view.center


? ? ? ? view.addSubview(iv)


? ? ? ? //添加到當(dāng)前視圖

? ? ? ? view.addSubview(v)

? ? ? ? //2.創(chuàng)建一個(gè)按鈕

? ? ? ? letbtn =UIButton(type: .contactAdd)


? ? ? ? v.addSubview(btn)


? ? ? ? btn.addTarget(self, action:#selector(clickMe), for: .touchUpInside)


? ? ? ? //MARK: 變量

? ? ? ? demo()

? ? ? ? demo1()


? ? ? ? //關(guān)于var和let的選擇

? ? ? ? //不可變的會(huì)更安全,開發(fā)的時(shí)候,通常會(huì)先使用let,在需要變化的時(shí)候,再改成var



? ? ? ? /// Variable 'x' was never mutated; consider changing to 'let' constant

? ? ? ? //變量X從來沒有被修改,建議改成‘let’

? ? ? ? varx=120

? ? ? ? lety =10


? ? ? ? print(x + y)

? ? ? ? v.backgroundColor = UIColor.red


? ? ? ? demo3()

? ? ? ? demo5201()

? ? ? ? demo5203(x:nil, y:nil)

? ? ? ? DEMO5204()

? ? }


? ? //007

? ? //最常見的一個(gè)錯(cuò)誤

? ? //Unexpectedly found nil while unwrapping an Optional value

? ? //在解包時(shí)發(fā)現(xiàn)nil值

? ? /**

?? ? 定義 可選項(xiàng)使用?

?? ? 解包使用? ! ,準(zhǔn)備計(jì)算

?*/

? ? funcdemo3() {

? ? ? ? //1:原始的可選項(xiàng)定義

? ? ? ? //none:沒有值,或者some 某一類型

? ? ? ? letx:Optional? =10



? ? ? ? //2:簡單的定義

? ? ? ? //'?'用來定義Y是一個(gè)可選的int類型,可能沒有值,也可能有一個(gè)整數(shù)

? ? ? ? lety:Int? =40// nil //= 20


? ? ? ? //輸出結(jié)果Optional(10),提示這是個(gè)可選值

? ? ? ? print(x)


? ? ? ? //Constant 'y' used before being initialized

? ? ? ? //常量y在使用之前必須初始化

? ? ? ? print(y)


? ? ? ? //不同類型直接的值不能直接運(yùn)算!如果沒有值是nil不是任何數(shù)據(jù)類型,不能參與計(jì)算

? ? ? ? //2>‘!’ 強(qiáng)行解包 - 可從可選中強(qiáng)行獲取對(duì)應(yīng)的非控值

? ? ? ? //程序員必須為每一個(gè)驚嘆號(hào)負(fù)責(zé)

? ? ? ? //程序中少用!

? ? ? ? print(x!+y!)


? ? ? ? //常量Y在使用之前必須初始化


? ? }


? ? funcdemo4()? {

? ? ? ? //1>定義y,沒有初始化

? ? ? ? //2》給常量設(shè)置樹脂,初始化的工作能做一次,再次修改常量會(huì)報(bào)錯(cuò)

? ? ? ? lety:Int?


? ? ? ? y =10


? ? ? ? //*** var? 的可選項(xiàng)默認(rèn)為nil

? ? ? ? //*** let 的可選值沒有默認(rèn)值


? ? ? ? varx:Int?


? ? ? ? x =10


? ? ? ? x =100


? ? ? ? print(x)





? ? }


? ? funcdemo2()? {

? ? ? ? //如果需要指定變量/常量的類型,也可以直接使用let x:類型 = 值

? ? ? ? //提示:在Swift開發(fā)中,極少使用直接指定類型,通常都是自動(dòng)推導(dǎo)!


? ? ? ? letx:Double=10

? ? ? ? lety =100.5

? ? ? ? print(x+y)



? ? }

? ? //MARK: Demo1

? ? //定義變量var

? ? //常量 let ,定義之后,不能修改

? ? //2.自動(dòng)推導(dǎo),變量/常量的類型會(huì)根據(jù)右側(cè)的代碼執(zhí)行結(jié)果,推導(dǎo)對(duì)應(yīng)的類型

? ? //熱鍵:option + click

? ? //3.在Swift中對(duì)類型要求異常嚴(yán)格

? ? //***任何不同的類型的數(shù)據(jù)之間都不允許直接運(yùn)算

? ? //不會(huì)做默認(rèn)的隱式轉(zhuǎn)換,所有的類型確定都要由程序員負(fù)責(zé)!

? ? //在Swift中,不存在基本數(shù)據(jù)類型,都是結(jié)構(gòu)體!

? ? funcdemo1()? {

? ? ? ? letx =10

? ? ? ? lety =10.5

? ? ? ? //將Y轉(zhuǎn)化成整數(shù)

? ? ? ? //OC 中的寫法(int)y ==>類型強(qiáng)轉(zhuǎn)

? ? ? ? //Swift 中Int()'結(jié)構(gòu)體'的構(gòu)造函數(shù)

? ? ? ? print(x+Int(y))


? ? ? ? print(Double(x) + y)



? ? }

? ? funcdemo() {

? ? ? ? //定義變量var

? ? ? ? //常量 let ,定義之后,不能修改

? ? ? ? //2.自動(dòng)推導(dǎo),變量/常量的類型會(huì)根據(jù)右側(cè)的代碼執(zhí)行結(jié)果,推導(dǎo)對(duì)應(yīng)的類型

? ? ? ? //熱鍵:option + click

? ? ? ? //整數(shù):Int

? ? ? ? varx=10

? ? ? ? //小數(shù):Double 精度高(OC 中 CGFloat)

? ? ? ? lety =10.5


? ? ? ? print(x , y)


? ? }

? ? //MARK: 5.20 簡單的分支和三目的寫法

? ? funcdemo520() {

? ? ? ? letx =10


? ? ? ? /**

?? ? ? ? 1:條件不需要()

?? ? ? ? 2:語句必須有{}

?? ? ? ? -很多公司的代碼規(guī)范中,禁止不使用{}

?*/

? ? ? ? ifx>5{

? ? ? ? ? ? print("大了")

? ? ? ? }else{

? ? ? ? ? ? //will never be executed

? ? ? ? ? ? //永遠(yuǎn)不會(huì)被執(zhí)行 - 編譯器變異的時(shí)候,會(huì)做語法檢查

? ? ? ? ? ? print("xiaole")

? ? ? ? }

? ? }


? ? funcdemo5201()? {

? ? ? ? letx =10


? ? ? ? x>5?print("大了") :print("小了")


? ? ? ? //分享,有印象就行

? ? ? ? //只執(zhí)行前面的

? ? ? ? x>5?print("大了") : ()



? ? }


? ? //MARK: - ??

? ? /**??是一個(gè)簡單的三目

?? ? - 如果沒有值,使用值

?? ? - 如果沒有值,就是用 ??? 后面的值代替

? ? */

? ? funcdemo5203(x:Int?,y:Int?)? {

? ? ? ? print((x ??0)+(y ??0))


? ? ? ? letname:String? ="老王"


? ? ? ? print((name ??"") +"你好")


//? ? ? ? print("\(name)你好")

? ? ? ? //??操作符的優(yōu)先級(jí)低,在使用的時(shí)候,記得加上小括號(hào)

? ? ? ? print(name ??""+"nihao")


? ? }

? ? //MARK: if let \ var

? ? funcDEMO5204()? {


? ? ? ? letoName:String? ="老王"

? ? ? ? letoAge:Int?? =10


? ? ? ? ifoName !=nil&& oAge !=nil{

? ? ? ? ? ? print(oName! +String(oAge!) )

? ? ? ? }



? ? }


? ? funcdemo5202(x:Int?,y:Int?)? {

//? ? ? ? let x: Int? = 10

//? ? ? ? let y: Int? = 200


? ? ? ? ifx !=nil&& y !=nil{

? ? ? ? ? ? print(x! + y!)

? ? ? ? }else{

? ? ? ? ? ? print("x huozhe y wei nil")

? ? ? ? }

? ? ? ? //強(qiáng)行解包有風(fēng)險(xiǎn)

? ? }


? ? @objcfuncclickMe(btn:UIButton) -> () {

? ? ? ? print(#function)//#function跟蹤函數(shù)

? ? ? ? print("哈哈哈哈")

? ? }

? ? overridefuncdidReceiveMemoryWarning() {

? ? ? ? super.didReceiveMemoryWarning()

? ? ? ? // Dispose of any resources that can be recreated.

? ? }

}


這次先突出幾個(gè)學(xué)習(xí)的知識(shí)點(diǎn):

1://MARK:?

很好用的一個(gè)標(biāo)記符,因?yàn)殚_發(fā)的內(nèi)容他不會(huì)是一個(gè)整體,所以你可以通過他來區(qū)分開不同的模塊,并且在如圖的部位看到并選擇相應(yīng)的模塊位置。


2:對(duì)比一下OC和Swift的一些常用代碼的區(qū)別:

1:OC [[UIView alloc] initWithFrame:xxx]

?Swift UIView(XXX:)


?類名() == alloc/init? 等價(jià)

?2.類方法? OC? [UIColor redColor]

? ? ? ? ? Swift UIColor.red


?3:訪問當(dāng)前對(duì)象的屬性,可以不使用‘self’

?建議:都不用,在編譯器提示的時(shí)候再添加,會(huì)對(duì)‘語境’有更好的體會(huì)

?原因:閉包(提前準(zhǔn)備好的代碼,在需要的時(shí)候執(zhí)行):(類似于 OC block),需要使用 self.


?4:沒有分號(hào);

?“;”目的分割語句的,在Swift中,默認(rèn)不需要


?5:枚舉類型、

?OC UIButtonTypeContactAdd

?Swift? '.'contactAdd


?6:監(jiān)聽方法

OC @selector

?Swift? #selector 如果帶參數(shù),不需要使用“:”

?2.0


?7:調(diào)試

?OC? ? NSLog

?Swift print

?-沒有時(shí)間

?-效率比NSLog要高

?跟蹤函數(shù)的時(shí)候

?OC __FUNCTION__

?Swift #function


這些我在代碼的開頭也寫了,Swift相對(duì)于很多語言來講,是一個(gè)親密度很高的語言,我們可以在Swift上找到很多像Objective-C,Java,C++之類語言的影子;當(dāng)然,通過對(duì)比聯(lián)想學(xué)習(xí),你會(huì)學(xué)的更快;


3:??????一個(gè)簡單的三目

?? ? - 如果沒有值,使用值

?? ? - 如果沒有值,就是用 ??? 后面的值代替


? ? funcdemo5203(x:Int?,y:Int?)? {

? ? ? ? print((x ??0)+(y ??0))

? ? ? ? letname:String? ="老王"

? ? ? ? print((name ??"") +"你好")

//? ? ? ? print("\(name)你好")

? ? ? ? //??操作符的優(yōu)先級(jí)低,在使用的時(shí)候,記得加上小括號(hào)

? ? ? ? print(name ??""+"nihao")

? ? }

OK,今天就講這些知識(shí)點(diǎn),其實(shí)的話,一開始學(xué)習(xí)一門語言,對(duì)于代碼一定要多碼,當(dāng)然,更重要的是有效代碼,我們程序員不就是為了提高世界的運(yùn)行效率而碼代碼的嘛??

關(guān)于新的語言學(xué)習(xí)的話,代碼自己碼的代碼要常回頭看看,嗯~,我碼的代碼真好看(其實(shí)吧,你碼的代碼,嗯,我就不打擊你了,哈哈哈),開個(gè)玩笑;

像我這么自戀的人,一般會(huì)把代碼打印出來,細(xì)細(xì)品味??,誰讓我有打印機(jī)呢~

一張一張積累,也是讓你對(duì)自己走過的路,學(xué)過的東西有一個(gè)數(shù),不然的話,滿電腦屏幕的代碼,你會(huì)暈的哦??。更何況,對(duì)于初學(xué)者來講的話,其實(shí)你一天我感覺不會(huì)太多,誰讓你是初學(xué)者呢??

今天就先到這邊了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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