iOS Swift func,class func,@objc func的区别:1、概念不同;2、定义方式不同;3、调用方式不同。概念不同是指iOS Swift func是普通的 Swift 函数,class func是在类中定义的函数,@objc func是在 Swift 中使用 Objective-C 中定义的函数。
一、iOS Swift func,class func,@objc func的区别
1、概念不同
- iOS Swift func:普通的 Swift 函数,没有使用 class 或 static 关键字修饰。
- class func:在类中定义的函数,使用 class 关键字修饰。
- @objc func:在 Swift 中使用 Objective-C 中定义的函数,使用 @objc 关键字修饰。
2、定义方式不同
- iOS Swift func:可以定义在全局作用域或类中
- class func:可以被子类继承并且可以在子类中进行重写
- @objc func:一般用于在 Swift 语言中定义 Objective-C 的 API
3、调用方式不同
- iOS Swift func:调用时可以使用实例名或函数名,可以被实例和类型调用
- class func:调用时需要通过类名来调用,不能通过实例名调用
- @objc func:调用时需要使用 Objective-C 的语法进行调用,不能使用 Swift 语法
二、Swift 函数的定义
1、无形式参数的函数
函数没有要求必须输入一个参数,可以没有形式参数。函数的定义仍然需要在名字后边加一个圆括号,即使它不接受形式参数也得这样做。当函数被调用的时候也要在函数的名字后边加一个空的圆括号。下面是代码示例:
//无形式参数
func sayHelloWorld() -> String {
return "hello world"
}
sayHelloWorld() //调用也需要带圆括号
2、多形式参数的函数
函数可以输入多个形式参数,可以写在函数后边的圆括号内,用逗号分隔。下面是代码示例:
//多形式参数
func addTwoNumbers(num1: Int, num2: Int) -> Int {
return num1 + num2
}
addTwoNumbers(num1: 1, num2: 2)
3、无返回值的函数
函数没有返回值。下面是代码示例:
func greet(person: String) {
print("hello, \(person)")
}
greet(person: "Lily")
4、多返回值的函数
为了让函数返回多个值作为一个复合的返回值,你可以使用元组类型作为返回类型,返回类型也可能为 nil,因此也可以是可选元组返回类型。下面是代码示例:
func minMax(array: [Int]) -> (min: Int, max: Int)? {
if array.isEmpty {
return nil
}
var minValue = array[0]
var maxValue = array[0]
for value in array {
if value < minValue {
minValue = value
} else if value > maxValue {
maxValue = value
}
}
return (minValue, maxValue)
}
if let array = minMax(array: [8, 101, -2, 10, 59]) {
print("min is \(array.min), max is \(array.max)")
}
5、函数实际参数标签和形式参数名
每一个函数的形式参数都包含实际参数标签和形式参名。实际参数标签用在调用函数的时候;在调用函数的时候每一个实际参数前边都要写实际参数标签。形式参数名用在函数的实现当中。默认情况下,形式参数使用它们的形式参数名作为实际参数标签。在提供形式参数名之前写实际参数标签,用空格分隔。如果你为一个形式参数提供了实际参数标签,那么这个实际参数就必须在调用函数的时候使用标签。如果对于函数的形式参数不想使用实际参数标签的话,可以利用下划线( _ )来为这个形式参数代替显式的实际参数标签。下面是代码示例:
//eat 为实际参数标签, food 为形式参数名
func eat(person: String, eat food: String) {
print("\(person) started eating an \(food)")
}
eat(person: "zhangsan", eat: "apple")
//省略实际参数标签
func someFunction(_ firstNum: Int, secondNum: Int) {
print("firstNum is \(firstNum),secondNum is \(secondNum)")
}
someFunction(1, secondNum: 2)
6、默认形式参数值
你可以通过在形式参数类型后给形式参数赋一个值来给函数的任意形式参数定义一个默认值。如果定义了默认值,你就可以在调用函数时候省略这个形式参数。下面是代码示例:
//定义函数的时候给一个默认的值
func someFunction(defaultNum: Int = 10) {
print("num is \(defaultNum)")
}
someFunction(defaultNum: 6) //输出: 6
someFunction() //输出: 10
7、可变形式参数
一个可变形式参数可以接受零或者多个特定类型的值。当调用函数的时候你可以利用可变形式参数来声明形式参数可以被传入值的数量是可变的。可以通过在形式参数的类型名称后边插入三个点符号(…)来书写可变形式参数。传入到可变参数中的值在函数的主体中被当作是对应类型的数组。下面是代码示例:
func sum(numbers: Int...) -> Int {
var sum = 0
for num in numbers {
sum += num
}
return sum
}
sum(numbers: 1, 2, 3, 4, 5)
延伸阅读1:Swift 函数的基本概念
Swift 统一的函数语法十分灵活,可以表达从简单的无形式参数的 C 风格函数到复杂的每一个形式参数都带有局部和外部形式参数名的 Objective-C 风格方法的任何内容。形式参数能提供一个默认的值来简化函数的调用,也可以被当作输入输出形式参数被传递,它在函数执行完成时修改传递来的变量。