美文网首页
swift3.1 Basic

swift3.1 Basic

作者: 岁月蹉跎繁华落寞 | 来源:发表于2017-04-24 22:03 被阅读0次

    变量和常量

    let maximumNumberOfLoginAttempts = 10
    var currentLoginAttempt = 0
    var x = 0.0, y = 0.0, z = 0.0
    var red, green, blue: Double
    //变量和常量命名不能包括空白字符、数学符号、箭头、-、一些私有的unicode字符和线框画的字符,以及不能以数字开头。如果需要用系统关键词作为变量或常量名,需要用(`)符号扩起来
    var `var` = 40
    print(`var`)
    

    注释

    //单行注释
    /*多行注释
       多行注释*/
    允许多行嵌套注释
    /* This is the start of the first multiline comment.
     /* This is the second, nested multiline comment. */
     This is the end of the first multiline comment. */
    

    Integers

    //整型
    //UInt8 UInt16 UInt32 UInt64 Int8 Int16 Int32 Int64
    let minValue = UInt8.min  // minValue is equal to 0, and is of type UInt8
    let maxValue = UInt8.max  // maxValue is equal to 255, and is of type UInt8
    
    //Int(有符号) Uint(无符号) ===> On a 32-bit platform, Int is the same size as Int32.
    On a 64-bit platform, Int is the same size as Int64.
    
    //浮点型
    Double represents a 64-bit floating-point number.
    Float represents a 32-bit floating-point number.
    
    

    类型别名

    typealias AudioSample = UInt16
    
    

    Bool

    let i = 1
    if i {
        // this example will not compile, and will report an error
    }
    

    //元组

    
    let http404Error = (404, "Not Found")
    // http404Error is of type (Int, String), and equals (404, "Not Found")
    let (statusCode, statusMessage) = http404Error
    print("The status code is \(statusCode)")
    // Prints "The status code is 404"
    print("The status message is \(statusMessage)")
    // Prints "The status message is Not Found"
    
    let (justTheStatusCode, _) = http404Error
    print("The status code is \(justTheStatusCode)")
    // Prints "The status code is 404"
    
    print("The status code is \(http404Error.0)")
    // Prints "The status code is 404"
    print("The status message is \(http404Error.1)")
    // Prints "The status message is Not Found"
    
    let http200Status = (statusCode: 200, description: "OK")
    print("The status code is \(http200Status.statusCode)")
    // Prints "The status code is 200"
    print("The status message is \(http200Status.description)")
    // Prints "The status message is OK"
    

    可选型

    Swift’s nil is not the same as nil in Objective-C. In Objective-C, nil is a pointer to a nonexistent object. In Swift, nil is not a pointer—it is the absence of a value of a certain type. Optionals of any type can be set to nil, not just object types.

    var surveyAnswer: String?
    // surveyAnswer is automatically set to nil
    
    //如果确定变量有值,使用!强制解包
    if convertedNumber != nil {
        print("convertedNumber has an integer value of \(convertedNumber!).")
    }
    
    //optional binding
    if let actualNumber = Int(possibleNumber) {
        print("\"\(possibleNumber)\" has an integer value of \(actualNumber)")
    } else {
        print("\"\(possibleNumber)\" could not be converted to an integer")
    }
    
    //implicitly unwrapped optional
    let possibleString: String? = "An optional string."
    let forcedString: String = possibleString! // requires an exclamation mark
     
    let assumedString: String! = "An implicitly unwrapped optional string."
    let implicitString: String = assumedString // no need for an exclamation mark
    

    断言

    let age = -3
    assert(age >= 0, "A person's age cannot be less than zero")
    // this causes the assertion to trigger, because age is not >= 0
    
    

    操作符

    //一元操作符
    + - !
    //三元操作符
    ?:
    //swift中特殊的运算符
    ...     ..<
    //与c与oc不同,赋值运算符不返回值
    if x = y {//主要防止==误写为=
        // This is not valid, because x = y does not return a value.
    }
    
    //The compound assignment operators do not return a value. For example, you cannot write let b = a += 2.
    
    //=== && !==  whether two object references both refer to the same object instance
    
    //元组的比较是从左向右,元组中元素个数小于7才可以比较。
    (1, "zebra") < (2, "apple")   // true because 1 is less than 2; "zebra" and "apple" are not compared
    (3, "apple") < (3, "bird")    // true because 3 is equal to 3, and "apple" is less than "bird"
    (4, "dog") == (4, "dog")      // true because 4 is equal to 4, and "dog" is equal to "dog"
    
    //空值合并操作符,unwraps an optional a if it contains a value, or returns a default value b if a is nil.
    a??b
    相当于a != nil ? a! : b
    

    String && Character

    //值类型
    var emptyString = ""               // empty string literal
    var anotherEmptyString = String()  // initializer syntax
    
    if emptyString.isEmpty {//判断字符串是否为空
        print("Nothing to see here")
    }
    
    //字符串是否可变通过定义为常量或变量来区分
    var variableString = "Horse"
    variableString += " and carriage"
    // variableString is now "Horse and carriage"
     
    let constantString = "Highlander"
    constantString += " and another Highlander"
    // this reports a compile-time error - a constant string cannot be modified
    
    //遍历字符串中的字符
    for character in "Dog!🐶".characters {
        print(character)
    }
    
    let exclamationMark: Character = "!"
    
    let catCharacters: [Character] = ["C", "a", "t", "!", "🐱"]
    let catString = String(catCharacters)
    print(catString)
    
    let exclamationMark: Character = "!"
    welcome.append(exclamationMark)
    
    let dollarSign = "\u{24}"        // $,  Unicode scalar U+0024
    let blackHeart = "\u{2665}"      // ♥,  Unicode scalar U+2665
    let sparklingHeart = "\u{1F496}" // 💖, Unicode scalar U+1F496
    
    //字符串访问
    let greeting = "Guten Tag!"
    greeting[greeting.startIndex]
    // G
    greeting[greeting.index(before: greeting.endIndex)]
    // !
    greeting[greeting.index(after: greeting.startIndex)]
    // u
    let index = greeting.index(greeting.startIndex, offsetBy: 7)
    greeting[index]
    // a
    
    greeting[greeting.endIndex] // Error
    greeting.index(after: greeting.endIndex) // Error
    
    for index in greeting.characters.indices {
        print("\(greeting[index]) ", terminator: "")
    }
    
    //字符串插入操作
    var welcome = "hello"
    welcome.insert("!", at: welcome.endIndex)
    // welcome now equals "hello!"
     
    welcome.insert(contentsOf:" there".characters, at: welcome.index(before: welcome.endIndex))
    // welcome now equals "hello there!"
    
    //字符串删除操作
    welcome.remove(at: welcome.index(before: welcome.endIndex))
    // welcome now equals "hello there"
     
    let range = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex
    welcome.removeSubrange(range)
    

    集合类型

    1.Array
    var someInts = [Int]()
    print("someInts is of type [Int] with \(someInts.count) items.")
    someInts.append(3)
    // someInts now contains 1 value of type Int
    someInts = []
    // someInts is now an empty array, but is still of type [Int]
    
    var threeDoubles = Array(repeating: 0.0, count: 3)
    // threeDoubles is of type [Double], and equals [0.0, 0.0, 0.0]
    
    var anotherThreeDoubles = Array(repeating: 2.5, count: 3)
    // anotherThreeDoubles is of type [Double], and equals [2.5, 2.5, 2.5]
     
    var sixDoubles = threeDoubles + anotherThreeDoubles
    // sixDoubles is inferred as [Double], and equals [0.0, 0.0, 0.0, 2.5, 2.5, 2.5]
    
    //通过字面量初始化数组
    var shoppingList: [String] = ["Eggs", "Milk"]
    var shoppingList = ["Eggs", "Milk"]
    
    //访问和操作数组
    print("The shopping list contains \(shoppingList.count) items.")
    // Prints "The shopping list contains 2 items.
    
    //判断数组是否为空
    if shoppingList.isEmpty {
        print("The shopping list is empty.")
    } else {
        print("The shopping list is not empty.")
    }
    // Prints "The shopping list is not empty.
    
    shoppingList.append("Flour")
    // shoppingList now contains 3 items, and someone is making pancakes
    
    shoppingList += ["Baking Powder"]
    // shoppingList now contains 4 items
    shoppingList += ["Chocolate Spread", "Cheese", "Butter"]
    // shoppingList now contains 7 items
    
    shoppingList[0] = "Six eggs"
    // the first item in the list is now equal to "Six eggs" rather than "Eggs"
    
    shoppingList[4...6] = ["Bananas", "Apples"]
    // shoppingList now contains 6 items
    
    shoppingList.insert("Maple Syrup", at: 0)
    // shoppingList now contains 7 items
    // "Maple Syrup" is now the first item in the list"
    
    let mapleSyrup = shoppingList.remove(at: 0)
    // the item that was at index 0 has just been removed
    // shoppingList now contains 6 items, and no Maple Syrup
    // the mapleSyrup constant is now equal to the removed "Maple Syrup" string"
    
    //遍历数组
    for item in shoppingList {
        print(item)
    }
    // Six eggs
    // Milk
    // Flour
    // Baking Powder
    // Bananas
    
    for (index, value) in shoppingList.enumerated() {
        print("Item \(index + 1): \(value)")
    }
    // Item 1: Six eggs
    // Item 2: Milk
    // Item 3: Flour
    // Item 4: Baking Powder
    // Item 5: Bananas
    
    
    2.Sets
    var letters = Set<Character>()
    print("letters is of type Set<Character> with \(letters.count) items.")
    // Prints "letters is of type Set<Character> with 0 items.
    
    letters.insert("a")
    // letters now contains 1 value of type Character
    letters = []
    // letters is now an empty set, but is still of type Set<Character>
    
    var favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"]
    // favoriteGenres has been initialized with three initial items
    
    //访问和操作集合
    print("I have \(favoriteGenres.count) favorite music genres.")
    // Prints "I have 3 favorite music genres.
    
    if favoriteGenres.isEmpty {
        print("As far as music goes, I'm not picky.")
    } else {
        print("I have particular music preferences.")
    }
    // Prints "I have particular music preferences.
    
    favoriteGenres.insert("Jazz")
    // favoriteGenres now contains 4 items
    
    if let removedGenre = favoriteGenres.remove("Rock") {
        print("\(removedGenre)? I'm over it.")
    } else {
        print("I never much cared for that.")
    }
    // Prints "Rock? I'm over it.
    
    if favoriteGenres.contains("Funk") {
        print("I get up on the good foot.")
    } else {
        print("It's too funky in here.")
    }
    // Prints "It's too funky in here.
    
    //遍历集合
    for genre in favoriteGenres {
        print("\(genre)")
    }
    // Jazz
    // Hip hop
    // Classical
    
    //按升序输出
    for genre in favoriteGenres.sorted() {
        print("\(genre)")
    }
    // Classical
    // Hip hop
    // Jazz
    
    let oddDigits: Set = [1, 3, 5, 7, 9]
    let evenDigits: Set = [0, 2, 4, 6, 8]
    let singleDigitPrimeNumbers: Set = [2, 3, 5, 7]
     
    oddDigits.union(evenDigits).sorted()
    // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]并集
    oddDigits.intersection(evenDigits).sorted()
    // [] 交集
    oddDigits.subtracting(singleDigitPrimeNumbers).sorted()
    // [1, 9] 
    oddDigits.symmetricDifference(singleDigitPrimeNumbers).sorted()
    // [1, 2, 9] 
    
    
    let houseAnimals: Set = ["🐶", "🐱"]
    let farmAnimals: Set = ["🐮", "🐔", "🐑", "🐶", "🐱"]
    let cityAnimals: Set = ["🐦", "🐭"]
     
    houseAnimals.isSubset(of: farmAnimals)
    // true
    farmAnimals.isSuperset(of: houseAnimals)
    // true
    farmAnimals.isDisjoint(with: cityAnimals)
    // true
    
    3.Dictionary
    var namesOfIntegers = [Int: String]()
    // namesOfIntegers is an empty [Int: String] dictionary
    
    namesOfIntegers[16] = "sixteen"
    // namesOfIntegers now contains 1 key-value pair
    namesOfIntegers = [:]
    // namesOfIntegers is once again an empty dictionary of type [Int: String]
    
    var airports: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
    
    print("The airports dictionary contains \(airports.count) items.")
    // Prints "The airports dictionary contains 2 items.
    
    if airports.isEmpty {
        print("The airports dictionary is empty.")
    } else {
        print("The airports dictionary is not empty.")
    }
    // Prints "The airports dictionary is not empty.
    
    airports["LHR"] = "London Heathrow"
    
    //the method returns a value of type String?, or “optional String”. This optional value contains the old value for that key if one existed before the update, or nil if no value existed
    if let oldValue = airports.updateValue("Dublin Airport", forKey: "DUB") {
        print("The old value for DUB was \(oldValue).")
    }
    // Prints "The old value for DUB was Dublin.
    
    
    if let airportName = airports["DUB"] {
        print("The name of the airport is \(airportName).")
    } else {
        print("That airport is not in the airports dictionary.")
    }
    // Prints "The name of the airport is Dublin Airport."
    
    airports["APL"] = "Apple International"
    // "Apple International" is not the real airport for APL, so delete it
    airports["APL"] = nil
    // APL has now been removed from the dictionary
    
    if let removedValue = airports.removeValue(forKey: "DUB") {
        print("The removed airport's name is \(removedValue).")
    } else {
        print("The airports dictionary does not contain a value for DUB.")
    }
    // Prints "The removed airport's name is Dublin Airport."
    
    
    for (airportCode, airportName) in airports {
        print("\(airportCode): \(airportName)")
    }
    // YYZ: Toronto Pearson
    // LHR: London Heathrow
    
    
    for airportCode in airports.keys {
        print("Airport code: \(airportCode)")
    }
    // Airport code: YYZ
    // Airport code: LHR
     
    for airportName in airports.values {
        print("Airport name: \(airportName)")
    }
    // Airport name: Toronto Pearson
    // Airport name: London Heathrow
    
    let airportCodes = [String](airports.keys)
    // airportCodes is ["YYZ", "LHR"]
     
    let airportNames = [String](airports.values)
    // airportNames is ["Toronto Pearson", "London Heathrow"]
    

    控制流

    //for-in loops
    for index in 1...5 {
        print("\(index) times 5 is \(index * 5)")
    }
    // 1 times 5 is 5
    // 2 times 5 is 10
    // 3 times 5 is 15
    // 4 times 5 is 20
    // 5 times 5 is 25
    
    
    let base = 3
    let power = 10
    var answer = 1
    for _ in 1...power {
        answer *= base
    }
    print("\(base) to the power of \(power) is \(answer)")
    // Prints "3 to the power of 10 is 59049"
    
    //while循环 
    while condition {
        statements
    }
    
    //repeat while循环
    repeat {
        statements
    } while condition
    
    //if
    var temperatureInFahrenheit = 30
    if temperatureInFahrenheit <= 32 {
        print("It's very cold. Consider wearing a scarf.")
    }
    // Prints "It's very cold. Consider wearing a scarf. 
    
    // if else
    temperatureInFahrenheit = 90
    if temperatureInFahrenheit <= 32 {
        print("It's very cold. Consider wearing a scarf.")
    } else if temperatureInFahrenheit >= 86 {
        print("It's really warm. Don't forget to wear sunscreen.")
    } else {
        print("It's not that cold. Wear a t-shirt.")
    }
    // Prints "It's really warm. Don't forget to wear sunscreen."
    
    //switch
    switch some value to consider {
    case value 1:
        respond to value 1
    case value 2,
         value 3:
        respond to value 2 or 3
    default:
        otherwise, do something else
    }
    
    //每个分支都不能为空
    let anotherCharacter: Character = "a"
    switch anotherCharacter {
    case "a": // Invalid, the case has an empty body
    case "A":
        print("The letter A")
    default:
        print("Not the letter A")
    }
    // This will report a compile-time error.
    
    let somePoint = (1, 1)
    switch somePoint {
    case (0, 0):
        print("(0, 0) is at the origin")
    case (_, 0):
        print("(\(somePoint.0), 0) is on the x-axis")
    case (0, _):
        print("(0, \(somePoint.1)) is on the y-axis")
    case (-2...2, -2...2):
        print("(\(somePoint.0), \(somePoint.1)) is inside the box")
    default:
        print("(\(somePoint.0), \(somePoint.1)) is outside of the box")
    }
    // Prints "(1, 1) is inside the box"
    
    //value binding
    let anotherPoint = (2, 0)
    switch anotherPoint {
    case (let x, 0):
        print("on the x-axis with an x value of \(x)")
    case (0, let y):
        print("on the y-axis with a y value of \(y)")
    case let (x, y):
        print("somewhere else at (\(x), \(y))")
    }
    // Prints "on the x-axis with an x value of 2"
    
    
    //where
    let yetAnotherPoint = (1, -1)
    switch yetAnotherPoint {
    case let (x, y) where x == y:
        print("(\(x), \(y)) is on the line x == y")
    case let (x, y) where x == -y:
        print("(\(x), \(y)) is on the line x == -y")
    case let (x, y):
        print("(\(x), \(y)) is just some arbitrary point")
    }
    // Prints "(1, -1) is on the line x == -y"
    
    
    //control transfer statements
    1.continue
    2.break
    3.fallthrough
    let integerToDescribe = 5
    var description = "The number \(integerToDescribe) is"
    switch integerToDescribe {
    case 2, 3, 5, 7, 11, 13, 17, 19:
        description += " a prime number, and also"
        fallthrough
    default:
        description += " an integer."
    }
    print(description)
    // Prints "The number 5 is a prime number, and also an integer." 
    4.return
    5.throw
    
    
    //Labeled Statements
    label name: while condition {
        statements
    }
    
    gameLoop: while square != finalSquare {
        diceRoll += 1
        if diceRoll == 7 { diceRoll = 1 }
        switch square + diceRoll {
        case finalSquare:
            // diceRoll will move us to the final square, so the game is over
            break gameLoop
        case let newSquare where newSquare > finalSquare:
            // diceRoll will move us beyond the final square, so roll again
            continue gameLoop
        default:
            // this is a valid move, so find out its effect
            square += diceRoll
            square += board[square]
        }
    }
    print("Game over!")
    
    
    //guard
    guard let name = person["name"] else {
            return
        }
        
        print("Hello \(name)!")
        
        guard let location = person["location"] else {
            print("I hope the weather is nice near you.")
            return
        }
        
        print("I hope the weather is nice in \(location).")
    
    //Checking API Availability
    if #available(iOS 10, macOS 10.12, *) {
        // Use iOS 10 APIs on iOS, and use macOS 10.12 APIs on macOS
    } else {
        // Fall back to earlier iOS and macOS APIs
    }
    

    相关文章

      网友评论

          本文标题:swift3.1 Basic

          本文链接:https://www.haomeiwen.com/subject/yamjzttx.html