zoukankan      html  css  js  c++  java
  • Swift 函数

    1、函数的定义

    func test() ->Void{
        print("test")
    }
    
    func test() {
        print("test")
    }
    func test() ->(){
        print("test")
    }
    func pi() -> Double {
        return 3.14
    }
    
    

    2、隐式返回

    func sum (v1 :Int , v2: Int) -> Int{
        return v1+v2;
    }
    //形参默认是let 也只能是let
    func sum (v1 :Int , v2: Int) -> Int{
         v1+v2;
    }

    3、元组返回、实现多返回值

    func calcute(v1 :Int , v2: Int) ->(sum:Int,cha:Int,avg:Double){
        return (v1+v2,v1-v2,Double((v1+v2))/2.0)
    }
    
    print(calcute(v1: 2, v2: 3))
    print(calcute(v1: 2, v2: 3).sum)
    print(calcute(v1: 2, v2: 3).cha)
    print(calcute(v1: 2, v2: 3).avg)

    4、参数标签

    func gotoWork( time:Int) ->(){
        print("gotoWork:(time)点")
    }
    //参数标签
    func gotoWork(at time:Int) ->(){
        print("gotoWork:(time)点")
    }
    
    gotoWork(at: 8)
    //使用下划线省略参数标签
    func sum (_ v1 :Int ,_ v2: Int) -> Int{
        return v1+v2;
    }
    
    print(sum(3, 3))

    5、默认参数值

    func person (name : String="nobody" , age: Int = 50 ,weight:Double) {
        print("name:(name)  age(age)  weight:(weight)")
    }
    person(name: "jack", age: 18, weight: 99.5)
    person(weight: 33)
    person(name: "tom", weight: 12)
    // 输出
    //name:jack  age18  weight:99.5
    //name:nobody  age50  weight:33.0
    //name:tom  age50  weight:12.0

    6、可变参数

    func sum (numbers : Int...)->(Int){
        var s = 0
        
        for i in numbers {
            s+=i
        }
        return s
    }
    
    print(sum(numbers: 1,2,3,4))  //10
    // 注意 一个函数只有有一个可变参数 并且紧跟着的第一个 参数标签不能省略
    func test (numbers: Int... , name:String ,_ age :Int){
        print("number:(numbers) name:(name) age:(age)")
    }
    test(numbers: 1,3,5, name: "jack", 20)
    //输出 number:[1, 3, 5] name:jack age:20

    7、Swift 自带的 print 函数

    /// - Parameters:
    ///   - items: Zero or more items to print.
    ///   - separator: A string to print between each item. The default is a single
    ///     space (`" "`).
    ///   - terminator: The string to print after all items have been printed. The
    ///     default is a newline (`"
    "`).
    //public func print(_ items: Any..., separator: String = " ", terminator: String = "
    ")
    // separator 元素分割符  terminator 结尾符号
    print(1,2,3,4, separator: "--", terminator: "..")
    print(8,9,10, separator: "--", terminator: "..")
    //输出 1--2--3--4..8--9--10..

    8、 inout

    可以用inout定义一个输入输出参数:可以在函数内部修改外部实参的值

    可变参数不能标记为inout

     inout参数不能有默认值

    inout参数的本质是地址传递(引用传递)

    inout参数只能传入可以被多次赋值的

    func swapValue(v1 : inout Int,v2 : inout Int){
        let t = v1;
        v1=v2;
        v2=t;
    }
    
    var a = 10
    var b = 20
    
    swapValue(v1: &a, v2: &b)
    print("a(a)==b(b)")
    
    swap(&a, &b)
    print("a(a)==b(b)")

    9、函数重载

    //规则  函数名相同  参数类型不同、参数标签不同
    func sum (a:Int,b:Int){
    
    }
    
    func sum (a:Float,b:Int){
        
    }
    
    func sum (a:Int,b:Float){
        
    }
    func sum (a:Int,b:Int,c:Int){
        
    }
    //函数重载于返回值无关
    //默认参数与函数重载参数冲突时
    func sum (a:Int,b:Int,d:Int=20){
        
    }
    
    sum(a: 2, b: 2) //调用 func sum (a:Int,b:Int){}
    
    //可变参数 省略参数标签、与函数重载产生二义性时 、编译器会报错 Ambiguous use of 'sum‘
    func sum (_ a:Int,_ b:Int){
        
    }
    func sum (_ numbers:Int...){
        
    }
    
    sum(1,2)

    10、函数类型

    func sum(v1:Int,v2:Int) -> Int {
        v1+v2
    }
    //定义变量
    var fun:(Int,Int)->Int = sum
    //调用时不需要带参数标签
    print(fun(1,33))
    
    //函数类型作为函数参数
    func sum(v1:Int,v2:Int) -> Int {
       return v1+v2
    }
    
    func difference(_ v1:Int,_ v2:Int)->Int{
     return  v1-v2
    }
    
    func calcute (_ result:(Int,Int)->Int ,v1:Int ,v2:Int){
            print(result(v1,v2))
    }
    
    calcute(sum(v1:v2:), v1: 1, v2: 9) //10
    calcute(difference(_:_:), v1: 9, v2: 3) //6
    //函数类型昨晚函数返回值
    func prefious(_ input:Int)->Int{
        input-1
    }
    func next(_ input:Int)->Int{
        input+1
    }
    
    func foward(isNext:Bool)->(Int)->Int{
        isNext ? next : prefious
    }
    
    print( foward(isNext: false)(9)) //8

    11、 typealias用来给类型 起别名

    typealias date = (year:Int,month:Int,day:Int)
    func test(d:date){
        print(d.year)
        print(d.1)
        print(d.day)
    }
    test(d: (1,2,3))
    
    typealias Byte = Int8
    
    typealias Intfn = (Int,Int)->Int
    
    func diff(v1:Int,v2:Int) -> Int {
        v1-v2
    }
    
    let fn:Intfn=diff
    
    print(fn(30,2)) //28
    //按照swift的标准定义void就是空元组  public typealias Void = ()

    12、嵌套函数 将函数定义在函数内部

    func foward(isNext:Bool)->(Int)->Int{
        func prefious(_ input:Int)->Int{
            input-1
        }
        func next(_ input:Int)->Int{
            input+1
        }
      return  isNext ? next : prefious
    }
    
    print(foward(isNext: true)(11)) //12
    print(foward(isNext: false)(8)) //7
  • 相关阅读:
    xlrd模块
    魔法路由ViewSetMixin
    AES加密
    orm的增删改查
    引入方式+样式+选择器
    视图+sql注入+事务+存储过程
    mysql用户管理+pymysql模块
    记录的详细操作
    约束
    一次http请求参数问题
  • 原文地址:https://www.cnblogs.com/ZhangShengjie/p/11322862.html
Copyright © 2011-2022 走看看