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 = .male
n.printSex() // male
Sex.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
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 实践:函数的主要内容,如果未能解决你的问题,请参考以下文章