swift學(xué)習(xí)之語(yǔ)法基礎(chǔ)二

命名空間

swift中引入了命名空間的概念踢京,只要在同一個(gè)命名空間下所有的資源都是共享的色建,而且默認(rèn)情況下項(xiàng)目名稱就是命名空間哺呜;如果使用swift開發(fā)中使用第三方框架最好使用cocospad,這樣第三方的所有東西都會(huì)被另外一個(gè)工程所管理箕戳,不會(huì)因?yàn)槊臻g問題產(chǎn)生某残,變量等的重定義。

1陵吸、獲取命名空間名稱

//獲取命名空間
let namespace = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"] as! String`
//用字符串創(chuàng)建類
let aClass = NSClassFromString(namespace + "." + valueTypeString)
//用字符串創(chuàng)建控制器
let namespace = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"] as! String
 // let cls = NSClassFromString(namespace + "." + "HomeTableViewController") as! UIViewController.Type
    let clsName = NSClassFromString(namespace + "." + "HomeTableViewController")
    let cls = clsName as! UIViewController.Type
    let vc = cls.init()
    print(vc)

2玻墅、修改命名空間名稱

Snip20160301_1.png

可選類型

1、swift中的方法或者數(shù)據(jù)類型后面有一個(gè)?就代表返回的是一個(gè)可選類型Optional壮虫。
2澳厢、可選值必須解包才可以參加計(jì)算,如果不解包可選值會(huì)被Optional包裹旨指,是不能參加計(jì)算的
3赏酥、應(yīng)該盡量使用guard let ... elseif let解包,避免一堆?!的情況
4谆构、只有在迫不得已而且絕對(duì)確定強(qiáng)制解包不會(huì)導(dǎo)致崩潰的情況下,才使用強(qiáng)制解包框都,否則可能導(dǎo)致程序崩潰

1搬素、可選類型的定義?

var name:String?//可選類型定義
name = "Hello world!!!"
print(name) //打印輸出結(jié)果Optional("Hello world!!!")
print(name!)//強(qiáng)制解包輸出結(jié)果Hello world!!!

2、可選類型解包

2.1魏保、強(qiáng)制解包!:強(qiáng)制解包就是在需要強(qiáng)制解包的變量后面添加一個(gè)!
var fullName:String?
print(url!)//強(qiáng)制解包熬尺,奔潰
fullName = "姓名"
print(url!)//強(qiáng)制解包成功

為避免因?yàn)閺?qiáng)制解包導(dǎo)致的奔潰,swift提供了可選值綁定

2.2谓罗、可選解包使用guard let ... elseif let解包

if let & guard let 的命名技巧:直接使用同名

//guard let ... else
var fullName:String?
var firstName:String?
var secondName:String?

fullName = "姓名"
firstName = "名字"
secondName = "姓氏"

guard let full_name = fullName,
          first_name = firstName,
          second_name = secondName else
{
     return;//本次解包不成功可選值存在`nil`粱哼,退出本次解包,也可能使用到`continue`
}

//解包成功
print(full_name + "," + first_name + "," + second_name)

//if let
var fullName:String?
var firstName:String?
var secondName:String?

fullName = "姓名"
firstName = "名字"
secondName = "姓氏"

if let full_name = fullName,
        first_name = firstName,
        second_name = secondName
{
    //解包成功
    print(full_name + "," + first_name + "," + second_name)
}
2.3檩咱、guard case let / if case let
2.4揭措、for case let
2.5、switch case let

類型轉(zhuǎn)換

swift不存在隱式類型轉(zhuǎn)換
1)基礎(chǔ)類型轉(zhuǎn)換
目的類型(變量)剛好不同與OC
2)可選類型刻蚯,對(duì)象绊含,結(jié)構(gòu)體類型轉(zhuǎn)換isas炊汹,as?躬充,as!
因?yàn)閟wift中的結(jié)構(gòu)體和class都可以通過()來創(chuàng)建,所有基礎(chǔ)類型的轉(zhuǎn)換方法是不能做類型轉(zhuǎn)換的
3)swift中除去String類型,其他多數(shù)情況下as需要使用as?as!充甚,起碼我很少見到

//is
是否可以做類型轉(zhuǎn)換以政,可以返回true,不可以返回false
//as
//as?
帶條件的類型轉(zhuǎn)換伴找,返回optional類型妙蔗,轉(zhuǎn)換成功返回轉(zhuǎn)換后的值,失敗返回nil
//as!
強(qiáng)制轉(zhuǎn)換疆瑰,返回指定類型眉反,轉(zhuǎn)換失敗運(yùn)行時(shí)報(bào)錯(cuò)
//as?和as!選擇
要進(jìn)行轉(zhuǎn)換的是as?使用as?,是as!使用

懶加載

1穆役、swift中的懶加載與OC不同寸五,懶加載的閉包只會(huì)執(zhí)行一次,然后分配獨(dú)立的存儲(chǔ)空間耿币,即使將懶加載的變量直接設(shè)置為nil閉包也不會(huì)再執(zhí)行一次梳杏,所以不要在內(nèi)存警告的時(shí)候?qū)屑虞d的view設(shè)置為nil,從父控件移除
2淹接、懶加載的本質(zhì)是閉包
3十性、懶加載只在結(jié)構(gòu)體和class中有效,不要在playground中直接使用
4塑悼、通常情況下只要在有初始化的變量前添加關(guān)鍵字lazy即可懶加載變量var name = ""懶加載稱為lazy var name = ""
5劲适、只能懶加載變量,常量不能懶加載
6厢蒜、懶加載的構(gòu)造方法沒有智能提示霞势,eg:UITableView懶加載就沒有智能提示構(gòu)造方法,得生敲

//完整版的懶加載代碼
lazy var myView:UIView = { ()->UIView in
    return UIView()
}()
//常用的懶加載代碼
lazy var myView:UIView = {
    //邏輯判斷
    return UIView()
}()
lazy var myView:UIView = UIView()
lazy var name = ""

@objc

1斑鸦、swift中使用@objc修飾的類型可以通過OC的Runtime的消息機(jī)制進(jìn)行調(diào)用
2阳欲、在把按鈕定義槽方法private后需要用@objc修飾槽方法鲫构,否則會(huì)調(diào)用失敗伦忠,如果不用@objc修飾會(huì)報(bào)錯(cuò)
3滤蝠、在使用optional關(guān)鍵字定義協(xié)議方法的時(shí)候需要用@objc修飾協(xié)議,因?yàn)閟wift中的協(xié)議方法默認(rèn)是必須實(shí)現(xiàn)的嘱巾,選擇實(shí)現(xiàn)是OC的特性

//按鈕槽方法
button.addTarget(self, action: #selector(test), for: .touchUpInside)
@objc private func test()
{
   
}
//定義協(xié)議
 @objc protocol MyProtocol {  
      optional func test() -> Int 
}  

.self憨琳,.Type,.Protocol

1浓冒、.self 可以用在類型后面取得類型本身栽渴,也可以用在某個(gè)實(shí)例后面取得這個(gè)實(shí)例本身
2、.Type 可以用在類型后面表示的是某個(gè)類型的元類型
3稳懒、.Protocol 可以用在protocol類型后面表示的是某個(gè)protocol類型的元類型

//注冊(cè)cell
self.tableView.registerClass(
    UITableViewCell.self, forCellReuseIdentifier: "myCell")

//類型轉(zhuǎn)換
vcType as! UIViewController.Type

private闲擦,internal慢味,public,open(3.0)墅冷,fileprivate(3.0)

這些保護(hù)作用域的關(guān)鍵字不能使用在方法內(nèi)部纯路,class內(nèi)推薦使用fileprivate
1、private:作用域在當(dāng)前的{}或者文件內(nèi)
2寞忿、fileprivate:作用域在當(dāng)前文件驰唬,推薦使用
3、internal:默認(rèn)作用域
4腔彰、public:可以被任何人訪問叫编。但其他module中不可以被override和繼承,而在module內(nèi)可以被override和繼承
5霹抛、open:可以被任何人使用搓逾,包括override和繼承

異常處理

在需要異常處理的函數(shù)方法聲明后面加throw關(guān)鍵字
在掉該方法的時(shí)候使用do{try}catch{}
try

//基本格式
do
{
    //沒有異常的處理代碼
   //將try關(guān)鍵字加在有throw關(guān)鍵字說明的函數(shù)調(diào)用前方空格隔開
}
catch
{
    //處理異常,默認(rèn)的異常存儲(chǔ)變量為error
    print(error)
}
//json序列化的例子
    //1杯拐、獲取json數(shù)據(jù)
    //1.1獲取json路徑
    let path = NSBundle.mainBundle().pathForResource("MainVCSettings.json", ofType: nil)
    //1.2獲取json數(shù)據(jù)
    if let jsonPath = path
    {
        let jsonData = NSData(contentsOfFile: jsonPath)
        //1.3json序列化
        do
        {
            
            let arrJson = try NSJSONSerialization.JSONObjectWithData(jsonData!, options: NSJSONReadingOptions.MutableContainers)
//                print(arrJson)
            //2霞篡、便利數(shù)組
            //swift中便利數(shù)組必須告知數(shù)組元素都是什么類型
            for dict in arrJson as! [[String:String]]
            {
//                    print(dict)
                let vcName = dict["vcName"]
                let title = dict["title"]
                let imageName = dict["imageName"]
                addChildViewController(vcName!, title: title!, imageName: imageName!)
            }
        }
        catch
        {
            //沒有服務(wù)器數(shù)據(jù),創(chuàng)建本地控制器
            addChildViewController("HomeTableViewController", title: "首頁(yè)", imageName:"tabbar_home")
            addChildViewController("MessageTableViewController", title: "消息", imageName:"tabbar_message_center")
            addChildViewController("DiscoverTableViewController", title: "發(fā)現(xiàn)", imageName:"tabbar_discover")
            addChildViewController("ProfileTableViewController", title: "我", imageName:"tabbar_profile")
        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末端逼,一起剝皮案震驚了整個(gè)濱河市朗兵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌顶滩,老刑警劉巖余掖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異诲祸,居然都是意外死亡浊吏,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門救氯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人歌憨,你說我怎么就攤上這事着憨。” “怎么了务嫡?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵甲抖,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我心铃,道長(zhǎng)准谚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任去扣,我火速辦了婚禮柱衔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己唆铐,他們只是感情好哲戚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著艾岂,像睡著了一般顺少。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上王浴,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天脆炎,我揣著相機(jī)與錄音,去河邊找鬼氓辣。 笑死秒裕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的筛婉。 我是一名探鬼主播簇爆,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼爽撒!你這毒婦竟也來了入蛆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤硕勿,失蹤者是張志新(化名)和其女友劉穎哨毁,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體源武,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扼褪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了粱栖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片话浇。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖闹究,靈堂內(nèi)的尸體忽然破棺而出幔崖,到底是詐尸還是另有隱情,我是刑警寧澤渣淤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布赏寇,位于F島的核電站,受9級(jí)特大地震影響价认,放射性物質(zhì)發(fā)生泄漏嗅定。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一用踩、第九天 我趴在偏房一處隱蔽的房頂上張望渠退。 院中可真熱鬧忙迁,春花似錦、人聲如沸智什。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)荠锭。三九已至旱眯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間证九,已是汗流浹背删豺。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留愧怜,地道東北人呀页。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像拥坛,于是被迫代替她去往敵國(guó)和親蓬蝶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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

  • Swift 介紹 簡(jiǎn)介 Swift 語(yǔ)言由蘋果公司在 2014 年推出猜惋,用來撰寫 OS X 和 iOS 應(yīng)用程序 ...
    大L君閱讀 3,209評(píng)論 3 25
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)丸氛、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,093評(píng)論 4 62
  • 簡(jiǎn)介 特點(diǎn)(1)優(yōu)于OC著摔,快速缓窜,安全(2)取消了預(yù)編譯指令包括宏定義(OC用的太多了)(3)取消了OC指針和不安全...
    洛洛愛吃肉閱讀 928評(píng)論 0 3
  • 山本風(fēng)華,因雪白頭谍咆。 水自無憂禾锤,因風(fēng)而皺。 * * * * * * 相遇摹察,你說恩掷,葉桐?嗯,好供嚎,鳳凰鳴矣螃成,于彼高岡。...
    天涯戲子閱讀 262評(píng)論 0 1
  • 《你和頭等艙的距離宁炫,差的不只是錢》這篇文章偿曙,首先感覺作者用的標(biāo)題就讓讀者產(chǎn)生了懸念和興趣。讓你有點(diǎn)開一覽而快的...
    肖智英閱讀 237評(píng)論 0 0