Swift 实践:函数

Posted iOS程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift 实践:函数相关的知识,希望对你有一定的参考价值。

 函数定义 


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 实践:函数的主要内容,如果未能解决你的问题,请参考以下文章

Swift 中全局变量和函数的最佳实践是啥?

swift常用代码片段

从使用 wkwebview 返回值的 javascript 调用 swift 函数

swift 代码片段

20155307刘浩《网络对抗》逆向及Bof基础

20155311高梓云《网络对抗》逆向及Bof基础