Swift學習一 初步認識

//swift中打印用 print,句末中可以不用分號結尾
// print("hello world");

    //let聲明常量 陋率,var聲明變量
    
    let myConstant = 42
    
    var myVariable = 42
    
    myVariable = 50
    
    print(myConstant,myVariable)
    
    //如果初始值沒有提供足夠的信息(或沒有初始值)绎狭,那需要在變量后面聲明類型孩饼,用冒號分割龟糕。
    let string:String = "ssss"
    
    print(string)
    

    //值永遠不會被隱式轉換成其他類型华弓,如果需要把一個值轉換成其他類型续誉,請顯示轉換
    let label = "the width is"
    
    let width = 100
    
    let widthLabel  = label + String(width)
    
    print(widthLabel)
    
    //簡單的把值轉換成字符串的方法:把值寫到括號中弛作,并在括號之前寫一個反斜杠
    
    let apples = 3
    let oranges = 5
    let appleSummary = "I have\(apples) apple."
    let fruitSummary = "I have\(apples + oranges) pieces of fruit"
    print(appleSummary,fruitSummary)
    
    //使用方括號[]來創(chuàng)建數組和字典,并使用下標或者鍵(key)來訪問元素析校,最后一個元素后面允許有個逗號。
    var shoppingList = ["1","2","3","4"]
    shoppingList[1] = "bottle if water"
    
    var occupadtions = ["Malcolm":"Captain","Kaylee":"Mechanic",]
    
    occupadtions["Jayne"] = "Public Relations"
    
    print(shoppingList ,occupadtions);
    
    //創(chuàng)建一個空數組或者字典铜涉,使用初始化語法
    
    let emptyArray = [String]()
    let emptyDictionary = [String:Float]()
    
    //如果類型信息可以被推斷出來智玻,可以用[]和[:]來創(chuàng)建空數組和空字典--就像你聲明變量或給函數傳參數的時候一樣
    shoppingList = []
    occupadtions = [:]
    
    //控制流
    //使用if和switch來進行條件操作,使用for-in,for,while和repeat-while來進行循環(huán)芙代,包裹條件和循環(huán)變量括號可以省略吊奢,但是語句體的大括號是必須的
    
    let individuaScores  = [75,43,103,87,12]
    var teamScore = 0
    for score in individuaScores {
    
        if  score > 50 {
            
            teamScore += 3
            
        }else{
        
            teamScore += 1
        }

    }
    print(teamScore);//輸出值為11
    
//使用if語句中,條件必須是一個布爾表達式---這意味著像if score {...} 這樣的代碼將報錯纹烹,而不會隱形的與0作對比页滚。可以用if和let來處理缺失的情況滔韵,這些值可由可選值來代表逻谦,一個可選的值是一個具有的值或者是nil以表示值缺失。在類型后面加一個問號 來標記這個變量的值是可選的
    
    var optionalString:String? = "Hello"
    print(optionalString == nil)
    
    //如果變量的可選值是nil陪蜻,條件會判斷為false邦马,大括號中的代碼會被跳過,如果不是nil,會將值解包并賦值給let后面的常量滋将,這樣代碼塊就可以使用這個值了邻悬。
    var optionalName:String? = "John Appleseed"
    var greeting = "hello"
    
    if let name = optionalName {
        greeting = "Hello,\(name)"
        
    }else{
    //把optionalName改成nil,greeting會是什么?添加一個optionalName語句,當optionalName是nil時給 greeting 賦一個不同的值。
        greeting = "Hello,\(optionalName == nil)"
    }
    print(greeting)
    
//      print("hello,\(greeting)")

    //另一種處理可選值的方法是通過使用??操作符號來提供一個默認值随闽,如果可選值缺失的話父丰,可以使用默認值來代替。
    let nickName:String? = nil
    let fullName:String = "Jhon Appleseed"
    let informalGreeting = "Hi \(nickName ?? fullName)"
    
    print(informalGreeting)
    
    //switch支持任意類型的數據以及各種比較操作--不僅僅是整數以及測試相等
    let vegetable = "red pepper"
    switch vegetable {
        
    case "cekery":
        print("Add some raisins and make ants on a log")
        
    case "cucumber","watercress":
        print("That would make a good tea sandwich")
       
        //注意let 將匹配等式的值賦值給常量x
    case let x where x.hasSuffix("pepper"):
        print("Is it a spicy \(x)?")
        
    default:
        print("Everything tastes good in soup.")
    }
    
    //用for-in 來遍歷字典,需要兩個變量來表示每個鍵值對.字典是一個無需的集合,所以他們的鍵和值以任意順序迭代結束
    let interstingNumbers  = ["Prime":[2,3,5,7,11,13],
                              "Fibonacci":[1,1,2,3,5,8],
                              "Square":[1,4,9,16,25],]
    
    var largest = 0
    for (kind,numbers) in interstingNumbers {
        
        print(numbers,kind)
        
        for number in numbers {
            if number > largest {
                largest = number
            }
        }
    }
    print(largest)
    
    //使用while 來重復運行一段代碼知道不滿足條件掘宪,循環(huán)條件也可以在結尾蛾扇,保證能至少循環(huán)一次
    var n = 2
    while n < 100 {
        n = n * 2
    }
    print(n)
    
    var m = 2
    repeat {
        m=m * 2
    } while m < 100
    print(m)
    
    //你可以在循環(huán)中使用..<來表示范圍,如果想包含的話需要使用...
    var total = 0
    for i in 0..<4 {
        total += i
    }
    print(total)
    
    
    /*-------------函數和閉包----------------*/
    //使用func 來聲明一個函數魏滚,使用名字和參數來調用函數镀首,使用->來指定函數返回值得的類型
    func greets(persons:String,day:String) -> String {
        return "Hello \(persons) , today is \(day)."
    }
    
    print(greets(persons: "Bob" , day: "Tuesday"))
    
    
    //默認情況下,函數使用它們的參數名稱作為它們參數的標簽鼠次,在參數名稱前可以自定義參數標簽更哄,或者使用_表示不使用參數標簽
    func greet (_ person:String, on day:String)->String{
    
        return"hello \(person),today is \(day)"
    }
    
    print(greet("John", on: "wednesday"))
    
    
    //使用元祖來讓一個函數返回多個值,該元素的元素可以用名稱或數字來表示
    func calculateStatistics(scores:[NSInteger]) -> (min: NSInteger,max:NSInteger,sum:NSInteger) {
    
        var min = scores[0]
        var max = scores[0]
        var sum = 0
        
        for score in scores {
            if score > max {
            
                max = score
            }else if score < min{
            
                min = score
            }
            
            sum += score
        }
        return (min,max,sum)
    }
    let statistics = calculateStatistics(scores: [5,3,100,3,9])
    print(statistics.sum)
    print(statistics.1)
    
    //函數可以帶有可變個數的參數腥寇,這些參數在函數內表現為數組的形式
    func sumOf(numbers:NSInteger...) -> NSInteger{
    
        var sum = 0
        for number in numbers {
            sum += number
        }
        
        return sum
        
    }
    
    print(sumOf(),sumOf(numbers: 42,597,12))
    
    //函數可以嵌套成翩,被嵌套的函數可以訪問外側函數的變量,你可以使用嵌套函數來重構一個太長或者太復雜的函數
    func returnFifteen() -> NSInteger {
    
        var y = 10
        func add() {
        
            y += 5
        }
        add()
        return y
        
    }
    
    print(returnFifteen())
    
    //函數是第一等類型赦役,這意味著函數可以作為另一個函數的返回值
    func makeIncrementer() -> ((NSInteger) -> (NSInteger)){
    
        func addOne(number: NSInteger) ->NSInteger {
        
            return 1 + number
        }
        return addOne
    }
    
    let increment = makeIncrementer()
    print(increment(7))
    
    
    //函數也可以當做參數傳入另一個函數
    func hasAnyMatches(list:[NSInteger],condition:(NSInteger) -> Bool) -> Bool {
    
        for item in list {
            if condition(item) {
                return true
            }
        }
        return false
    }
    
    func lessThanTen(number:NSInteger) -> Bool {
    
        return number < 10
    }
    let numbers = [20,19,7,12]
    print(hasAnyMatches(list: numbers, condition: lessThanTen))
    
    //函數實際上是一種特殊的閉包:它是一段能之后被調取的代碼麻敌,閉包中的代碼能訪問閉包所建作用域中能得到的變量函數,即使閉包是在一個不同的作用域被執(zhí)行的扩劝,你已經在嵌套函數例子中多看到庸论,你可以用{}來創(chuàng)建一個匿名閉包, 使用in將參數和返回值類型聲明與閉包函數進行分離
    let mappedNumbers1  = numbers.map({
    
        (number:NSInteger) -> NSInteger in
        let resault = 3 * number
        return resault
    })
    print(mappedNumbers1)
    
    //有很多種創(chuàng)建簡單的閉包方法棒呛,如果一個閉包的類型已知聂示,比如作為一個回調函數,你可以忽略參數的類型和返回值簇秒,單個語句閉包會把他語句的值當做結果返回
    let mappedNumbers2 = numbers.map({number in 3*number})
    
    print(mappedNumbers2)
    
    //你可以通過參數位置而不是參數名字來引用參數---這個方法在非常的閉包中非常有用鱼喉。當一個閉包作為最后一個參數傳至給一個函數的時候,它可以直接跟在括號后面趋观,當一個閉包是還給函數的唯一參數扛禽,你可以完全忽略括號
    let sortedNumbers = numbers.sorted()
    print(sortedNumbers)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市皱坛,隨后出現的幾起案子编曼,更是在濱河造成了極大的恐慌,老刑警劉巖剩辟,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掐场,死亡現場離奇詭異往扔,居然都是意外死亡,警方通過查閱死者的電腦和手機熊户,發(fā)現死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門萍膛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嚷堡,你說我怎么就攤上這事蝗罗。” “怎么了蝌戒?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵串塑,是天一觀的道長。 經常有香客問我瓶颠,道長拟赊,這世上最難降的妖魔是什么刺桃? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任粹淋,我火速辦了婚禮,結果婚禮上瑟慈,老公的妹妹穿的比我還像新娘桃移。我一直安慰自己,他們只是感情好葛碧,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布借杰。 她就那樣靜靜地躺著,像睡著了一般进泼。 火紅的嫁衣襯著肌膚如雪蔗衡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天乳绕,我揣著相機與錄音绞惦,去河邊找鬼。 笑死洋措,一個胖子當著我的面吹牛济蝉,可吹牛的內容都是我干的。 我是一名探鬼主播菠发,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼王滤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了滓鸠?” 一聲冷哼從身側響起雁乡,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎糜俗,沒想到半個月后踱稍,有當地人在樹林里發(fā)現了一具尸體墩弯,經...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年寞射,在試婚紗的時候發(fā)現自己被綠了渔工。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡桥温,死狀恐怖引矩,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情侵浸,我是刑警寧澤旺韭,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站掏觉,受9級特大地震影響区端,放射性物質發(fā)生泄漏。R本人自食惡果不足惜澳腹,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一织盼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧酱塔,春花似錦沥邻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蕊玷,卻和暖如春邮利,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背垃帅。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工延届, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人挺智。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓祷愉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親赦颇。 傳聞我的和親對象是個殘疾皇子二鳄,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內容