设为首页 加入收藏

TOP

Swift 04.Functions(二)
2017-10-10 12:17:21 】 浏览:4733
Tags:Swift 04.Functions
查中是允许的。

func addTwoInts(a:Int,b:Int) ->Int{

    return a+b

}

var mathFunction: (Int, Int) -> Int = addTwoInts

let a = mathFunction(4,5)

print("Result:\(a) \(mathFunction(2, 3))")

 作为参数的函数

在 Swift 中,函数可以被用来当做变量传递。比如,一个函数可以含有一个函数类型的参数

func luckyNumberForName(name: String,lotteryHandl lotteryHandler: (String, Int) -> String) -> String {

    let luckyNumber = Int(arc4random() % 100)

    return lotteryHandler(name, luckyNumber)

}

func defaultLotteryHandler(name: String, luckyNumber: Int) -> String {

    return "\(name), your lucky number is \(luckyNumber)"

}

luckyNumberForName("Mr. Roboto", lotteryHandl: defaultLotteryHandler)

// Mr. Roboto, your lucky number is 38

注意下只有函数的引用被传入 — 在本例中是 defaultLotteryHandler。这个函数之后是否执行是由接收的函数决定。

 实例方法也可以用类似的方法传入:

func luckyNumberForName(name: String, lotteryHandl lotteryHandler: (String, Int) -> String) -> String {

    let luckyNumber = Int(arc4random() % 100)

    return lotteryHandler(name, luckyNumber)

}

class FunLottery {
    func defaultLotteryHandler(name: String, luckyNumber: Int) -> String {

        return "\(name), your lucky number is \(luckyNumber)"

    }
}

let funLottery = FunLottery()

luckyNumberForName("Mr. Roboto", lotteryHandl: funLottery.defaultLotteryHandler)

// Mr. Roboto, your lucky number is 38

为了让你的函数定义更具可读性,可以考虑为你函数的类型创建别名 (类似于 Objective-C 中的 typedef):

typealias lotteryOutputHandler = (String, Int) -> String

func luckyNumberForName(name: String, lotteryHandl lotteryHandler: lotteryOutputHandler) -> String {

    let luckyNumber = Int(arc4random() % 100)

    return lotteryHandler(name, luckyNumber)

}

你也可以使用不包含参数名的函数 (类似于 Objective-C 中的 blocks):

func luckyNumberForName(name: String, lotteryHandl lotteryHandler: (String, Int) -> String) -> String {

    let luckyNumber = Int(arc4random() % 100)

    return lotteryHandler(name, luckyNumber)

}

luckyNumberForName("Mr. Roboto", lotteryHandl: {name, number in

    return "\(name)'s' lucky number is \(number)"

})

// Mr. Roboto's lucky number is 74

在 Objective-C 中,使用 blocks 作为参数是异步操作是操作结束时的回调和错误处理的常见方式,这一方式在 Swift 中得到了很好的延续。
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇CocoaPods的安装和使用那些事(Xc.. 下一篇窥探Swift之使用Web浏览器编译Swi..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目