设为首页 加入收藏

TOP

swift 2.2 语法 (中)(二)
2017-10-13 10:33:07 】 浏览:5388
Tags:swift 2.2 语法
rn (num1,num2) } // 调用函数(交换的只是函数内部参数的值,而a,b的值并没变) test(a, num2: b) // 结果 9 6 print(a, b) // 结果 6 9 // 通过上面的方式可以明显看出值传递并不能真实转换外部变量的值,在swift中我们可以通 过"inout"关键字来讲外部变量的值传给函数参数,再改变其值 func test(inout num1 : Int, inout num2 : Int) -> (num1 : Int, num2 : Int) { let temp = num1 num1 = num2 num2 = temp return (num1, num2) } // 调用函数(因为传入的是a,b的变量地址,等于拿到了外部变量,函数内部操作的num1,num2可以看成a,b,因为他们的指针指向了a,b) test(&a, num2: &b) print(a,b)
  • 函数嵌套使用
    • swift中函数可以嵌套使用
    • 虽然可以嵌套使用,但是这种做法降低了可读性,所以尽量不要这样做

    //  函数嵌套
    
    let a = 100
    let b = 35
    
    func test() {
        func sum(num1 : Int, num2 : Int) {
            print("和为\(num1 + num2)")
        }
    
        print("test函数")
        sum(a, num2: b)
    }
    
    //  调用函数
    test()  //  先调用test函数,再调用sum函数
    

    注意:无法调用sum函数,因为它是test函数的一部分

  • 函数类型
    • 每个函数都有属于自己的类型,由函数的参数类型和返回值类型组成


    //  函数类型:定义2个函数,且都为 (String, String) -> (String) 类型
    
    func test1(name : String, city : String) -> String {
        return name + city
    }
    
    func test2(tiele : String, iconUrl : String) -> String {
        return "图片名称:\(tiele)图片地址为:\(iconUrl)"
    }
    
  • 将函数作当成变量传递

  • //  根据函数类型定义变量并将函数传递给变量
    var tempFunction : (String, String) -> String = test1
    //  使用变量名调用函数
    tempFunction("sd", "lw")
    
    • 将函数当成参数使用
    //  将函数当成参数使用
    func test3(str1 : String, str2 : String, tempFunction : (String, String) -> String) {
        print(tempFunction(str1, str2))
    }
    
    //  调用函数
    test3("aa", str2: "bb", tempFunction: test1)    //  结果 aabb
    
    • 函数当成返回值
    //  函数作为方法返回值
    /**
     *  判断一数是否为负数,是负数返回0,不是则返回原来的值
     */
    
    //  正数调用此函数
    func positive(num : Int) -> Int {
        
        return num
    }
    //  负数调用此函数
    func negative(num : Int) -> Int {
        
        return 0
    }
    
    //  将函数作为返回值
    func test(num : Int) -> (Int) -> Int {
        //  如果函数小于1就是负数,返回negative函数,如果大于1,则是正数,返回positive函数
        return num < 0 ? negative : positive
    }
    
    //  获取返回值(函数)
    let function = test(-1) //  因为是负数,所以返回negative函数
    
    //  调用方法(再将-1传入返回的函数)
    function(-1)   //  结果为 0
    

    枚举类型

    • 枚举用来定义一组通用类型的相关值,可以让达到让使用者按照设计者的规范使用特定的值
    • swift的枚举非常灵活,可以给枚举成员提供一个字符串,一个字符,一个整型或浮点值,不必给每个枚举成员提供值
    • C语言和OC里面枚举指定的一组相关成员为整型

    • 枚举类型定义
      • 使用 enum 关键词,将定义放在{}内
      • 使用 case 关键词定义新枚举成员
      • 需要注意的是,swift的枚举在被创建的时候不会像C和OC那样赋予默认整型值
      //  枚举定义
      enum testType {
          case testTypeOne
          case testTypeTwo
          case testTypeThree
      }
      //  当然也可以简写成下面的方式(在枚举成员特别多的情况下很好用)
      enum testType {
          case testTypeOne, testTypeTwo, testTypeThree
      }
      
    • 枚举类型赋值

    • 枚举类型赋值可以是整型、浮点型、字符、字符串
      • 如果有给枚举类型赋值,必须在枚举类型后面明确类型使用的类型


      //  枚举类型赋值
      enum testType1 : Int {
          case One = 1
          case Two = 2
          case Three = 3
      }
      //  或
      enum testType2 : Int{
          case One = 1, Two, Three
      }
      
    • 枚举类型使用

    //  枚举类型赋值(整型)
    enum testType1 : Int {
        case One = 1
        case Two 
        case Three 
    }
    
    //  枚举类型赋值(字符串)
    
    enum testType2 : String{
        case One = "a", Two = "b", Three
    }
    
    let j = testType1(rawValue: 2)  //  获取到枚举成员Two
    
    //  结果为Two
    if let j = j {
        switch j {
        case .One:
            print("One")
        case .Two:
            print("Two")
        case .Three:
            print("Three")
        }
    }
    
    let i = testType2(rawValue: "a")    //  获取到枚举成员One
    
    //  结果为One
    if let i = i {
        switch i {
        case .One:
            print("One")
        case .Two:
            print("Two")
        case .Three:
            print("Three")
        }
    }
    

    注意:

    1.如果明确了类型为整型且未设置初始值,那么由0开始依次递增(默认)

    2.如果明确了类型为整型但设置了初始值,就由初始值依次递增


    结构体(struct)

    • 结构体是一种数据结构
    • 结构体在方法(函数)中传递时时值传递,是值类型
    • 结构体是由一组相同类型或不同类型的数据组成的数据集合
    • 在特定情况下使用结构体,能使我们的代码结构更清晰

    • 定义结构体格式

    struct 结构体名称 {
        属性
    }
    
    • 结构体使用
    /**
     *  在手势开发过程中,我们需要监听手指移动的位置,这边我们来判断手指移动的开始位置和结束位置距离是否大于50
     */
     
    //  初始化
    首页 上一页 1 2 3 4 下一页 尾页 2/4/4
    】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
    上一篇深入剖析通知中心和KVO 下一篇iOS面试题总结 (三)

    最新文章

    热门文章

    Hot 文章

    Python

    C 语言

    C++基础

    大数据基础

    linux编程基础

    C/C++面试题目