搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > iOS程序员 > Swift 实践:函数

Swift 实践:函数

iOS程序员 2020-07-01

 函数定义 


func <#函数名#>(<#参数列表#>) -> <#返回值类型#> {   <#代码逻辑#>}


 形参、实参 


// 省略实参标签func test0(_ code: Int) -> String { return String(code)}
// 指定实参标签func test1(realTag code: Int) -> String { return String(code)}
// 默认实参标签func test2(code: Int) -> String { return String(code)}
// 默认形式参数值func test3(code: Int = 90) -> String { return String(code)}



 可变参数 

// 可变形式参数func test4(code: Int...) -> String { // 一个函数最多只能有一个可变参数 let codeType = type(of: code) return "code type is \(codeType)"}



 输入输出参数 

// 输入输出形式参数func test5(code: inout Int) -> String { code += 1 return String(code)}



 函数类型 

// 函数类型:由形式参数类型,返回类型组成print(type(of: test5(code:))) // (inout Int) -> String



 类型方法和实例方法 

类、枚举、结构体都可以定义实例方法和类型方法


struct 和 enum 是值类型,默认情况下,值类型的属性不能被自身的实例方法修改,在 func 前加关键字 mutating 之后允许修改属性。


///////////////////////////////////// 类/// 用 class 修饰方法class func getVCFromStoryboard(storyboard: String, vcIdentifier: String )-> UIViewController { let vc = UIStoryboard.init(name: storyboard, bundle: nil).instantiateViewController(withIdentifier: vcIdentifier) return vc;}
///////////////////////////////////// 枚举enum Sex { case male case female case unknow func printSex() { // 实例方法 print(self) } static func printType() { // 类型方法 print(self) }}
let n: Sex = .malen.printSex() // maleSex.printType() // Sex
///////////////////////////////////// 结构体
public struct Stack<T> { fileprivate var array = [T]() // 使用 mutating 修饰的方法,能在方法内部修改属性。 public mutating func push(_ element: T) { array.append(element) }}
// 没啥用的小tip:在func前面加个@discardableResult,可以消除函数调用后返回值未被使用的警告struct Point { var x = 0.0, y = 0.0 @discardableResult mutating func moveX(deltaX: Double) -> Double { x += deltaX return x }}



 参数默认值 

func setMonth(_ date: Date = Date()) { let format = DateFormatter() format.dateFormat = "YYYY年MM月" self.monthLabel.text = format.string(from: date)}
setMonth() // 不传的话,默认是 Date()



 函数的内嵌 



全局函数:在全局范围内定义的函数  eg:viewDidLoad

内嵌函数:在一个函数内部定义的函数


在一个函数内部可以定义另外一个函数,内部的函数可以使用外部函数里的变量。


cnswift 翻译文档中的解释是此做法是为了避免在一个某个函数太长或太复杂。(笔者的疑惑:避免复杂定义在外面不更好❓


override func viewDidLoad() { test() // 42}
func test() { let s = 32 func test2(value: Int) -> Int { return value + s } print(test2(value: 10))}



 函数重载 

  • 函数名相同

  • 参数个数不同 or 参数类型不同 or 参数标签不同


版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《Swift 实践:函数》的版权归原作者「iOS程序员」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注iOS程序员微信公众号

iOS程序员微信公众号:ioscxy

iOS程序员

手机扫描上方二维码即可关注iOS程序员微信公众号

iOS程序员最新文章

精品公众号随机推荐

下一篇 >>

Swift | Set集合