美文网首页
Swift-基础巩固

Swift-基础巩固

作者: Coder东 | 来源:发表于2019-03-13 17:00 被阅读0次

    1.简单值

    • 常量或者变量的类型必须和你赋给它们的值一样,然而,你不用明确地声明类型,声明的同时赋值的话,编译器会自动推断类型。
      let number: Float = 4
      print("输出数字:", number)
      

      输出数字: 4.0

    值永远不会被隐式转换为其他类型,如果你需要把一个值转换成其他类型,请显示转换

    • 数字转换字符串操作(方法一)
    let label = "the width is"
    let width = 94
    let widthLabel = label + String(width)//数字转换字符串操作
    print(widthLabel)
    

    打印结果:the width is94

    • 数字转字符串操作(方法二)把值写到括号中,并且在括号之前写一个反斜杠
    let apples = 3
    let oranges = 5
    let appleSummary = "I have \(apples) apples."
    let fruitSummary = "I have \(apples + oranges) pices of fruit"
    print(appleSummary)
    print(fruitSummary)
    

    输出结果:I have 3 apples.
    输出结果:I have 8 pices of fruit

    • 数组的创建和字典的使用
      使用方括号 [] 来创建数组和字典,并使用下标或者键(key)来访问元素,最后一个元素前允许有个逗号
    var shoppingList = ["catfish","water","tulips","blue paint"]
    shoppingList[1] = "bottle of water"
    print("shoppingList:",shoppingList)
    //shoppingList: ["catfish", "bottle of water", "tulips", "blue paint"]
    
    var occupations = [
               "Malcolm":"Captain",
               "Kaylee":"Mechanic",
           ]
    occupations["Jayne"] = "public relations"
    print(occupations)//["Kaylee": "Mechanic", "Malcolm": "Captain", "Jayne": "public relations"]
    //要创建一个空数组或者字典,使用初始化方法
    let emptyArray = [String]();
    let emptyDictionary = [String:Float]()
           
    //如果类型信息可以被推断出来,你可以用【】和[:]创建空数组和空字典----就像你声明变量或者给函数传参数的时候一样。
    shoppingList = []
    occupations = [:]
    print(shoppingList.isEmpty)//true
    

    2.控制流

    使用if和switch来进行条件控制,使用for-in、for、white和repeat-while来进行循环。包裹条件和循环变量括号可以省略,但是语句体的大括号是必须的

     let individualScores = [75,43,103,87,12]
     var teamScore = 0
     for score in individualScores{
        if score > 50 {
             teamScore += 3
        } else{
             teamScore += 1
        }
       }
     print("temaScore:",teamScore)//temaScore: 11
    
    • 在if语句中,条件必须是一个布尔表达式--这意味着像 if score {....}这样的代码将报错,而不会隐形的与0作比较。
    • 你可以一起使用if和let来处理值缺失的情况,这些值可由可选值来代表。一个可选值是一个具体的值或者是nil以表示值缺失。
      在类型后面加一个问号来标记这个变量的值是可选的
     var optionalString :String? = "hello"
     print(optionalString == nil)//false
     print(optionalString as Any)//Optional("hello")
    
     var optionalName:String? = nil
     var greeting="Hello!"
     if let name = optionalName {
         greeting = "Hello,\(name)"
     }
     print(greeting)//Hello!
    

    使用for-in来遍历字典,需要两个变量来表示每个键值对。字典是一个无序的集合,所以他们的键和值以任意x顺序迭代结束。

    let interestingNumbers = [
                "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 interestingNumbers {
                for number in numbers {
                    if number > largest{
                        largest = number
                    }
                }
             }
            print(largest) //25
    

    使用while来重复运行一段代码知道不满足条件。循环条件也可以在结尾,保证能至少循环一次。

     var n = 2;
     while n < 100 {
             n = n*2//128
     }
     print(n)
     var m = 2
     repeat{
           m = m * 2
    }while m < 100
     print(m)//128
    
    • 你可以在循环中使用..<表示范围,也可以使用传统的写法,两者是等价的
            var firstForLoop = 0
            for i  in 0..<4 {
                firstForLoop += i
            }
            print(firstForLoop)
            //总结: ..< 创建的范围不包含上届,如果想要包含的话需要使用...
            /*
             该中写法已经被swift3 废弃
            var secondForLoop = 0
            for var i = 0; i < 4; ++i {
                secondForLoop += i
            }
            print(secondForLoop)
            */
    

    3.函数和闭包

    • 使用 func 来声明一个函数,使用名字和参数来调用函数。 使用-> 来指定函数返回值类型
     func greet(name:String,day :String) -> String{
           return "Hello \(name),today is \(day)"
    }
    var str = greet(name: "Bob", day: "Tuesday")
    print(str)   //Hello Bob,today is Tuesday
    
    • 使用元组来让一个函数返回多个值,该元组的元素可以用名称或数字来表示
    func calculateStatistics (scores:[Int]) -> (min:Int,max:Int,sum:Int){
      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)//输出结果:120
    print(statistics.2)// 输出结果:120 如果把2改成3 提示:Value of tuple type '(min: Int, max: Int, sum: Int)' has no member '3'
    
    • 函数可以带有可变个数的参数,这些参数在函数内表现为数组的形式
    func sumOf(numbers: Int ...) -> Int{
    var sum = 0
      for number in numbers {
          sum += number
         }
        return sum
    }
        
    var sum = sumOf(numbers: 42,597,12)
    print(sum)//651
    
    • 函数可以嵌套。被嵌套的函数可以访问外侧函数的变量,你可以使用嵌套函数来重构一个太长或者太复杂的函数
     func returnFifteen() -> Int{
        var y = 10
        func add(){
               y += 5
          }
     add()
     return y
    }
    var y =  returnFifteen()
    print("y=",y)//y=15
    
    • 函数是第一等类型,这意味着函数可以作为另一个函数的返回值
    func makeIncrementer() -> ((Int) -> Int){  // swift3以后参数需要加括号,否则报错Single argument function types require parentheses
      func addOne(number: Int) -> Int{
            return 1 + number
        }
       return addOne
    }
     var  increment = makeIncrementer()
     print("increment:",increment)//increment: (Function)
     increment(7)
     print("increment含参数:",increment)//increment含参数: (Function)
    

    函数也可以当做参数传入另一个函数

    func hasAnyMatches(list:[Int],condition:(Int) -> Bool) -> Bool{
                for item in list {
                    if condition(item){
                        return true
                    }
                }
                return false
            }
            
            func lessThanTen(number:Int) -> Bool{
                return number < 10
            }
            var numbers = [20,19,7,12]
            var result = hasAnyMatches(list: numbers, condition: lessThanTen(number:))
            print(result)//true  当遇到数字7的时候就跳出本次循环了函数结束执行
    
         函数实际上是一种特殊的闭包:它是一段能之后被调取的代码。
         闭包中的代码能访问闭包所建作用域中能得到的变量和函数,即时闭包是在一个不同的作用域被执行的
         你已经在嵌套函数例子中看到,你可以使用{}来创建一个匿名闭包。使用in将参数和返回值类型声明与闭包函数体进行分离
         */
        numbers.map ({ (number:Int) -> Int in
            let result = 3 * number
            return result
        })
        /*
         有很多种创建更简洁闭包的方法,如果一个闭包的类型已知,比如作为一个回调函数,你可以忽略参数的类型和返回值。单个语句闭包会把它语句的值当做结果返回。
         */
        let mappedNumbers = numbers.map({number in 3*number })
        print(mappedNumbers)//[60, 57, 21, 36]
        
        /*
         你可以通过参数位置而不是参数名字来引用参数--这个方法在非常短的闭包中非常有用。
         当一个闭包作为最后一个参数传给一个函数的时候,它可以直接更在括号后面
         当一个闭包是传给函数的唯一参数,你可以完全忽略括号
         */
        let sortedNumbers = numbers.sort { $0 > $1 }
        print(sortedNumbers)

    相关文章

      网友评论

          本文标题:Swift-基础巩固

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