Swift首页投稿(暂停使用,暂停投稿)iOS Developer

Swift基础语法-函数-对比OC

2016-07-31  本文已影响93人  DwightChan

1. 函数的概念:


2. OC 的方法与 Swift 中函数比较

//不带参数
- (void)say{
    NSLog(@"hello");
}
//带有一个参数
- (void)sayWithName:(NSString *)name{
    NSLog(@"hello %@", name);
}
//带有多个参数
- (void)sayWithName:(NSString *)name age:(NSInteger)age{
    NSLog(@"hello %@ , I'm %tu years old", name, age);
}
//有返回值
- (NSString *)info{
    return @"name = CDH, age = 20";
}
//有返回值,并且带有返回值
- (NSString *)infoWithName:(NSString *)name age:(NSInteger)age{
    return [NSString stringWithFormat:
    @"name = %@,
    age = %tu", name, age];
}
//无参无返回值
func say() -> Void{
    print("hello")
}
say()
//输出结果: hello

func say1() {  //如果没有返回值可以不写
        print("hello")
}
say1()
//输出结果: hello
//有参无返回值
func sayWithName(name:String){
    print("hello \(name)")
}
sayWithName("CDH")
//输出结果: hello CDH
//带有多个参数
func sayWithName(name:String, age:Int){
    print("hello \(name) , I'm \(age) years old ")
}
sayWithName("CDH", age: 20)
//输出结果: hello CDH , I'm 20 years old
//无参有返回值
func info() -> String{
    return "name = cdh, age = 20"
}
print(info())
//输出结果: name = cdh, age = 20
//有参有返回值
func info(name:String, age:Int) -> String{
    return "name = \(name), age = \(age)"
}
print(info("cdh", age:20))
//输出结果: name = cdh, age = 20
//嵌套函数
var arr:Array<String> = ["cdh","Aarak","520"]
func showArray(array:[String]){
    for number in array{
        print("\(number), ")
    }
}
showArray(arr)
//输出结果:
//cdh,
//Aarak,
//520,
func bubbleSort(inout array:[Int]){
    func swap(inout a:Int, inout b:Int){
        let temp = a
        a = b
        b = temp
    }
    let count = array.count;
    for var i = 1; i < count; i++ {  // 推荐写成 i += 1
        for var j = 0; j < (count - i); j++ {
            if array[j] > array[j + 1] {
                swap(&array[j], b: &array[j + 1])
            }
        }
    }
}
var arr1:Array<Int> = [50,20,30,80]
bubbleSort(&arr1)
print(arr1)
//输出结果: [20, 30, 50, 80]

3. 内部参数与外部参数

func divisionOpertaion1(a: Double, b:Double) -> Double{
    return a / b
}
func divisionOpertaion2(dividend: Double, divisor:Double) -> Double{
    return dividend / divisor
}
func divisionOpertaion3(dividend a: Double, divisor b:Double) -> Double{
    return a / b
}
print(divisionOpertaion3(dividend: 10, divisor: 3.5))
func divisionOpertaion4(a: Double, divisor b:Double) -> Double{
    return a / b
}
print(divisionOpertaion4(10, divisor: 3.5))
//输出结果:
//2.85714285714286
//2.85714285714286

func divisionOpertaion(dividend: Double, divisor:Double) -> Double{
    return dividend / divisor
}
print(divisionOpertaion(10, divisor: 3.5))
//输出结果:2.85714285714286

//默认参数:
//可以在定义函数的时候给某个参数赋值, 当外部调用没有传递该参数时会自动使用默认值
func joinString(s1:String ,toString s2:String, jioner s3:String) ->String
{
    return s1 + s3 + s2;
}

func joinString2(s1:String ,toString
    s2:String, jioner
    s3:String = "❤️") ->String
{
    return s1 + s3 + s2;
}
print(joinString2("hi", toString:"beauty"))
//输出结果:hi❤️beauty
func joinString3(s1:String ,toString s2:String,jioner:String = "❤️") ->String{
    return s1 + jioner + s2;
}
print(joinString3("hi", toString:"beauty", jioner:"🐔"))
//输出结果: hi🐔beauty
func joinString4(s1:String ,
                 jioner:String = "❤️",
                 toString s2:String) ->String
{
    return s1 + jioner + s2;
}
print(joinString4("hi", jioner:"🐔", toString:"beauty"))
//输出结果: hi🐔beauty
func swap(var a:Int, var b:Int){
    print("交换前 a = \(a) b = \(b)")
    let temp = a;
    a = b;
    b = temp;
    print("交换后 a = \(a) b = \(b)")
}
func swap(inout a:Int, inout b:Int)
{
    let temp = a;
    a = b;
    b = temp;
}
var x1 = 10;
var y1 = 20;
print("交换前 a = \(x1) b = \(y1)")
swap(&x1, b: &y1)
print("交换后 a = \(x1) b = \(y1)")
//输出结果:
//交换前 a = 10 b = 20
//交换后 a = 20 b = 10
func add(num1:Int, num2:Int, num3:Int) -> Int {
    let sum = num1 + num2 + num3
    return sum
}
print(add(1, num2: 2, num3: 3))
//输出结果:6

func add(nums:[Int]) -> Int {
    var sum = 0;
    for num in nums {
        sum += num
    }
    return sum
}
print(add([1, 2, 3]))
//输出结果:6

func add(nums:Int...) -> Int{
    var sum = 0;
    for num in nums{
        sum += num
    }
    return sum
}
print(add(1, 2, 3))
//输出结果:6

func add(other:Int, nums:Int...) -> Int {
    var sum = 0;
    for num in nuts {
        sum += num
    }
    return sum
}
print(add(99, nums: 1, 2, 3))
//输出结果:6

4. 函数类型

//这两个函数的类型是 (Int, Int) -> Int
func sum(a: Int, b: Int) ->Int {
    return a + b;
}

func sub(a: Int, b: Int) ->Int{
    return a - b;
}
//可以利用函数类型定义函数变量和常量
var funcP:(Int, Int) -> Int = sum
funcP = sub
print(funcP(10, 20))
//输出结果: -10
//函数类型可以作为函数的参数
func calFunc(a: Int, b: Int ,Option:(Int, Int) -> Int) ->Int{
    return Option(a, b)
}
print(calFunc(10, b: 20, Option: sum))
print(calFunc(10, b: 20, Option: sub))
//输出结果:
//30
//-10
//函数类型可以作为函数返回值
func max(a: Int, b: Int) -> Int{
    return a > b ? a : b
}
func min(a: Int, b: Int) -> Int{
    return a < b ? a : b
}

func chooseFunc(getMax:Bool) -> (Int , Int) -> Int{
    return getMax ? max : min
}

var funcP2:(Int , Int) -> Int = chooseFunc(false)
print(funcP2(10, 20))
//输出结果: 10

上一篇 下一篇

猜你喜欢

热点阅读