MG--Swift3.x進(jìn)階語法學(xué)習(xí)1

  • for循環(huán)的高級(jí)遍歷

    • 一砌些、遍歷子控件而且指定是UILabel的控件才打印


    遍歷子控件而且指定是UILabel的控件才打印
    • 二、使用Where關(guān)鍵字查找名字

單個(gè)條件

多個(gè)條件使用&&
  • 三抢肛、遍歷中包含可選值

    • 通常寫法:打印出來的是可選值
      通常寫法
    • 優(yōu)化寫法:使用 case let name? 打印出來的不是可選值
      代替寫法
  • nil的用法

  • 如果使用了可選類型喷好,那么是非常危險(xiǎn)的,通常就需要通過“!”強(qiáng)制解包癞谒,這就會(huì)導(dǎo)致程序崩潰(Crash)。Swift提供了一個(gè)??的操作符,如果可選類型為nil弹砚,會(huì)讓它默認(rèn)值

  • eg: 舉個(gè)
let name: String? = "MG"
let otherName  = name ?? "小明"
print(otherName)
// 打印出來的是  `MG`
let name: String? = nil
let otherName  = name ?? "小明"
print(otherName)
// 打印出來的是  `小明
方法的返回值是可選值.png
  • 一般與關(guān)鍵字try連用

- #####使用do  try catch

- #####使用try? 可以簡化成這樣


58D6345E-7927-492F-AF2C-C044796577CC.png

- #####Optional binding(可選綁定)

if let unwrappedAuthorName = authorName {
         print("Author is \(unwrappedAuthorName)")
} else {
         print("No author.")
}

  • Lazy Loading

    • eg:舉個(gè)
    • 普通

class Person {
    let name: String
    init(name: String) {
        self.name = name
    }
    func reversedName() -> String {  // 字符串反轉(zhuǎn)方法
        return "\(name.uppercased()) backwords is \(String(name.uppercased().characters.reversed()))"
    }
}
let person = Person(name: "ming Swift")
print(person.reversedName())
>  - #Lazy
class Person {
    let name: String
    lazy var reversedName: String = self.getReversedName()
    init(name: String) {
        self.name = name
    }
    private func getReversedName() -> String { // 字符串反轉(zhuǎn)方法
        return "\(name.uppercased()) backwords is \(String(name.uppercased().characters.reversed()))"
    }
}
let person = Person(name: "ming Swift")
print(person.reversedName)

打印出來的字符串是 “MING SWIFT backwords is TFIWS GNIM”


  • goto用法

    • 我們來看普通的方法
var board = [[String]](repeating: [String](repeating: "",
                                           count: 10), count: 10)
board[3][5] = "x"
for (rowIndex, cols) in board.enumerated() {
      for (colIndex, col) in cols.enumerated() {
          if col == "x" {
              print("Found the treasure at row \(rowIndex) col \(colIndex)!")
          }
      }
}

解釋:雖然打印出來我們想要的結(jié)果双仍,但是這段代碼做了很多無用功。如果一開始搜索的找到的時(shí)候就使用break跳出循環(huán)迅栅。往下看看:

var board = [[String]](repeating: [String](repeating: "",
                                           count: 10), count: 10)
board[3][5] = "x"
for (rowIndex, cols) in board.enumerated() {
      for (colIndex, col) in cols.enumerated() {
          if col == "x" {
              print("Found the treasure at row \(rowIndex) col \(colIndex)!")
              break
          }
      }
}

解釋:然而殊校,使用break也只是結(jié)束了當(dāng)前的循環(huán),so it would exit the for (colIndex, col) loop then continue running the for (rowIndex, cols) loop.(for (colIndex, col)這個(gè)循環(huán)直到跑完for (rowIndex, cols) 循環(huán)才會(huì)退出)读存,這也浪費(fèi)了一些時(shí)間。我們繼續(xù)往下看更優(yōu)化的代碼:

var board = [[String]](repeating: [String](repeating: "",
                                           count: 10), count: 10)
board[3][5] = "x"
rowLoop: for (rowIndex, cols) in board.enumerated() {
      for (colIndex, col) in cols.enumerated() {
          if col == "x" {
              print("Found the treasure at row \(rowIndex) col \(colIndex)!")
              break rowLoop
          }
      }
}

解釋:標(biāo)記你的循環(huán)呕屎。這會(huì)立即跳出循環(huán),和結(jié)束后for (rowIndex, cols)循環(huán)——完美让簿。

  • 再舉個(gè)

-  未優(yōu)化代碼,層層嵌套
if userRequestedPrint() {
        if documentSaved() {
          if userAuthenticated() {
              if connectToNetwork() {
                  if uploadDocument("resignation.doc") {
                      if printDocument() {
                          print("Printed successfully!")
                      }
                  }
               }
           }
         }
  }
- 優(yōu)化后的代碼:使用Guard之后秀睛,層級(jí)會(huì)變得非常清晰尔当,這樣的代碼可讀性非常強(qiáng)
printing: if userRequestedPrint() {
          guard documentSaved() else { break printing }
          guard userAuthenticated() else { break printing }
          guard connectToNetwork() else { break printing }
          guard uploadDocument("work.doc") else { break printing }
          guard printDocument() else { break printing }
          print("Printed successfully!")
}



  • enum枚舉和Struct結(jié)構(gòu)體

    • eg:倫敦這個(gè)地方,有叫地理位置蹂安。有地鐵路線以及旅游景點(diǎn)椭迎。其中一個(gè)常量:地理位置,兩個(gè)嵌套的枚舉:地鐵路線以及旅游景點(diǎn)是一個(gè)枚舉田盈。

enum London {  
        static let coordinates = (lat: 51.507222, long: -0.1275) // 地理位置(經(jīng)緯度)
        enum SubwayLines {  // 地鐵路線
            case Bakerloo, Central, Circle, District, Elizabeth,HammersmithCity, Jubilee, Metropolitan, Northern, Piccadilly,
Victoria, WaterlooCity
        }
        enum Places {   // 位置
            case BuckinghamPalace, CityHall, OldBailey, Piccadilly,StPaulsCathedral
        }
 }
  • 舉個(gè) 枚舉

 enum R {
       enum Storyboards: String {
           case Main, Detail, Upgrade, Share, Help
       }
       enum Images: String {
           case Welcome, Home, About, Button
       } 
}
// 外界使用:現(xiàn)在流行的SnapKit畜号,MJRefresh等度有自己的前綴開頭也許就是這樣搞的
let home = R.Images.Home // 這樣層級(jí)也很清晰
  • 舉個(gè) 枚舉和結(jié)構(gòu)體

struct Deck {
        struct Card {
            enum Suit {
                case Hearts, Diamonds, Clubs, Spades
            }
            var rank: Int
            var suit: Suit
        }
        var cards = [Card]()
}
// 外界使用:現(xiàn)在流行的SnapKit,MJRefresh等度有自己的前綴開頭也許就是這樣搞的
let hearts = Deck.Card.Suit.Hearts // 這樣層級(jí)也很清晰

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末允瞧,一起剝皮案震驚了整個(gè)濱河市简软,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌述暂,老刑警劉巖痹升,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異畦韭,居然都是意外死亡疼蛾,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門艺配,熙熙樓的掌柜王于貴愁眉苦臉地迎上來察郁,“玉大人,你說我怎么就攤上這事妒挎∩” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵酝掩,是天一觀的道長鳞芙。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么原朝? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任驯嘱,我火速辦了婚禮,結(jié)果婚禮上喳坠,老公的妹妹穿的比我還像新娘鞠评。我一直安慰自己,他們只是感情好壕鹉,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布剃幌。 她就那樣靜靜地躺著,像睡著了一般晾浴。 火紅的嫁衣襯著肌膚如雪负乡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天脊凰,我揣著相機(jī)與錄音抖棘,去河邊找鬼。 笑死狸涌,一個(gè)胖子當(dāng)著我的面吹牛切省,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播帕胆,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼朝捆,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了惶楼?” 一聲冷哼從身側(cè)響起右蹦,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎歼捐,沒想到半個(gè)月后何陆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡豹储,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年贷盲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剥扣。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡巩剖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出钠怯,到底是詐尸還是另有隱情佳魔,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布晦炊,位于F島的核電站鞠鲜,受9級(jí)特大地震影響宁脊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贤姆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一榆苞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧霞捡,春花似錦坐漏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至音婶,卻和暖如春慨畸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背衣式。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留檐什,地道東北人碴卧。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像乃正,于是被迫代替她去往敵國和親住册。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

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