持续创作,加速成长!这是我参加「日新计划 · 6 月更文应战」的第16天,点击检查活动详情。
在本章中,你将学会Initializer
结构函数的运用办法。
前语
和Apple
官网或者网上分享的教程类文章不同,我将以实际开发角度叙述Swift
言语的一些概念和用法,方便咱们更好地学习和掌握Swift
言语。
这同时也是对自己学习Swift
言语进程的常识收拾。
如有错误,以你为准。
结构函数的定义
结构函数是一种特别的函数,主要用来在创建目标时初始化目标,为目标成员变量设置初始值。
在之前的章节中,咱们在类、结构体中能够声明常量和变量,并给变量/常量赋予了初始值,但如果不同事务当中存在初始值不同的情况,依照之前的办法,咱们需求在详细事务中从头赋值。
这,不行优雅。
在Swift
语法中,咱们能够运用结构函数的init()
办法,运用声明好类型的结构参数,然后在详细事务当中调用咱们类、结构体的声明好的参数,这样就能够不需求从头给参数赋予初始值。
结构函数的运用
咱们新建一个SwiftUI
项目,命名为SwiftUIInitializer
。
在Swift
开发中,咱们之前学过List
的用法,咱们需求一个List
展现一行行的数据。示例:
struct ContentView: View {
var body: some View {
// 简略的列表
List {
ForEach(1 ... 4, id: \.self) { index in
Text("第 \(index)页")
}
}
}
}
上述代码中,咱们构建了一个List
列表,然后遍历4
条数据,然后以Text
文本的办法展现出来。
此时咱们可能存在一个事务需求,需求运用列表,但不期望运用List
自带的布景色。由于SwiftUI
中的List
列表自身去掉布景色彩的API
,这时咱们需求自己实现它。这儿咱们就能够运用结构函数的init()
办法,在这个实例被调用时去掉布景色。
// 去掉List布景色彩
init() {
UITableView.appearance().backgroundColor = .clear
}
上述代码中,咱们运用了init
关键字命名的结构器的办法,在创建ContentView
实例时被调用,因为List
的底层是UITableView
,因而咱们使它的布景色彩为clear
,也便是没有布景色彩。
这是简略的结构函数的用法。
结构参数的运用
咱们也能够在定义结构器init()
时供给结构参数,然后在实例中就能够直接运用这些参数。
在Swift
开发进程中,咱们常常运用到RGB
色彩,咱们在Color
设置里都需求除以255
才能运用RGB
色彩。
let mainBtnColor = Color(red: 132.0 / 255.0, green: 161.0 / 255.0, blue: 255.0 / 255.0)
这,不行优雅。
为了更方便地运用RGB
色彩,咱们能够对Color
进行扩展。示例:
extension Color {
init(_ r: CGFloat, _ g: CGFloat, _ b: CGFloat) {
let red = r / 255.0
let green = g / 255.0
let blue = b / 255.0
self.init(red: red, green: green, blue: blue)
}
}
上述代码中,咱们对Color
进行拓展,在Color
结构体中,咱们为红、蓝、绿供给三个CGFloat
类型的形参进行命名,然后初始化Color
结构体自身。
这样,咱们要运用Color
色彩时,就只需求填入RGB
值,而不用再输入参数
和除以255
了,大大提高了编程的快捷性。
咱们能够直接在需求运用到Color
的当地调用。
.foregroundColor(Color(55, 186, 8))
本章完好代码
import SwiftUI
struct ContentView: View {
// 去掉List布景色彩
init() {
UITableView.appearance().backgroundColor = .clear
}
var body: some View {
// 简略的列表
List {
ForEach(1 ... 4, id: \.self) { index in
Text("第 \(index)页")
.foregroundColor(Color(55, 186, 8))
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
extension Color {
init(_ r: CGFloat, _ g: CGFloat, _ b: CGFloat) {
let red = r / 255.0
let green = g / 255.0
let blue = b / 255.0
self.init(red: red, green: green, blue: blue)
}
}
以上便是本章的全部内容。
快来动手试试吧!
如果本专栏对你有帮助,不妨点赞、谈论、关注~