學(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é)者呢??
今天就先到這邊了。