iOS Swift func,class func,@objc func的区别?
一、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 的 API3、调用方式不同
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) //输出: 6someFunction() //输出: 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 风格方法的任何内容。形式参数能提供一个默认的值来简化函数的调用,也可以被当作输入输出形式参数被传递,它在函数执行完成时修改传递来的变量。
猜你喜欢LIKE
相关推荐HOT
更多>>为什么要读JVM规范?
一、深入理解Java程序的工作原理阅读JVM规范可以帮助开发者深入了解Java程序的工作原理。JVM规范详细描述了Java程序编译、加载、解释和执行的过...详情>>
2023-10-18 23:44:39开发一款商城系统APP有什么优势?
一、开发一款商城系统APP的优势1、提供便捷的购物体验商城系统APP使消费者能够随时随地通过移动设备浏览和购买商品。用户可以轻松浏览产品目录...详情>>
2023-10-18 20:20:29为什么说Python适合写爬虫?
一、Python适合写爬虫的原因1、简洁性和易用性Python是一门简洁、优雅的编程语言,具有直观的语法和易于阅读的代码结构。相对于其他编程语言,P...详情>>
2023-10-18 19:57:52npm install –global、–save、–save-dev的区别?
一、npm install –global、–save、–save-dev的区别1、执行环境不同npm install –global:任意地方打开shell窗口皆可执行(前提npm是全局安...详情>>
2023-10-18 19:02:21热门推荐
为什么要读JVM规范?
沸什么是脏读、不可重复读、幻读?
热wos里的核心合集和所有数据库有什么区别?
热数据库应该怎么设计比较好?
新Navicat和Dbeaver有什么区别?
Android系统开发做什么?
selectdb和starrocks是什么关系?
开发一款商城系统APP有什么优势?
为什么说Python适合写爬虫?
到底为什么要用IoC和AOP??
npm install –global、–save、–save-dev的区别?
iOS Swift func,class func,@objc func的区别?
到底什么是csrf攻击,原理是什么?
JavaScript能达到什么效果?