持续创作,加快生长!这是我参与「日新方案 · 6 月更文挑战」的第25天,点击检查活动概况。
在本章中,你将学会OpaqueTypes
不透明类型的运用办法。
前言
和Apple
官网或者网上分享的教程类文章不同,我将以实践开发视点叙述Swift
言语的一些概念和用法,便利咱们更好地学习和掌握Swift
言语。
这一起也是对自己学习Swift
言语进程的常识整理。
如有过错,以你为准。
项目创建
咱们新建一个SwiftUI
项目,命名为SwiftUIOpaqueTypes
。
不透明类型的界说
不透明类型,是对泛型的增强。
不提供确认类型的回来值,咱们称之为不透明类型。
不透明类型在语法上能够躲藏详细类型,简略来说便是能够不运用class
类、Struct
结构体,然后回来咱们一种咱们需要的类型。
不透明类型的运用
在之前的章节中,咱们学习过Generics
泛型的运用,泛型便是一种不确认类型,不透明类型的实质便是不揭露的,私有的类型,只根据里面的内容回来详细的类型。示例:
import SwiftUI
struct ContentView: View {
var body: some View {
VStack {
titleView()
ListView()
}
}
}
struct titleView: View {
var body: some View {
Text("首页")
}
}
struct ListView: View {
var body: some View {
List {
ForEach(1 ... 4, id: \.self) { index in
Text("第 \(index)页")
}
}
}
}
上述代码中,是咱们之前学过的通过结构体的页面构建办法,这里咱们每一个View
都是确认的类型,也便是Struct
结构体。
Struct
结构体是揭露的、确认的类型。
在Swift
开发进程中,咱们除了class
类、Struct
结构体,也能够运用some
关键字加咱们需要回来的内容,构建回来成果。示例:
import SwiftUI
struct ContentView: View {
var body: some View {
VStack {
titleView
ListView
}
}
}
private var titleView: some View {
Text("首页")
}
private var ListView: some View {
List {
ForEach(1 ... 4, id: \.self) { index in
Text("第 \(index)页")
}
}
}
上述代码中,咱们运用some
关键字回来了一个View
的视图,它是一个不透明类型的成果。
SwiftUI
的一大特点是高度可组合,View
的仅有特点body
是另一个满意View
束缚的详细View
类型。
咱们看到了组合以及递归两个特性,这里运用了不透明回来类型的特性,对外躲藏了详细类型VStack
。
不透明类型的实例
咱们能够运用不透明类型的办法,到达简化代码的目的,也就无需界说很多独自的Struct
结构体完成页面样式。示例:
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationView {
Form {
Section {
toOurSiteView
toPrivacyPolicyView
toUserAgreementView
}
Section {
toAppstoreView
toFeedbackView
toAboutView
}
}
.navigationBarTitle("设置", displayMode: .inline)
.navigationBarItems(leading: backToMineView)
}
// 显示分割线
.onAppear {
UITableView.appearance().separatorColor = .systemGray4
}
}
}
上述代码中,咱们仍旧运用不透明类型的办法,创建了一个又一个View
,然后在ContentView
结构体中,咱们运用这些OpaqueTypes
不透明类型的View
,既能躲藏回来类型,也避免了回来类型很长的问题。
这便是some
的关键字效果,用在当回来值为不确认类型的情况。
本章代码
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationView {
Form {
Section {
toOurSiteView
toPrivacyPolicyView
toUserAgreementView
}
Section {
toAppstoreView
toFeedbackView
toAboutView
}
}
.navigationBarTitle("设置", displayMode: .inline)
.navigationBarItems(leading: backToMineView)
}
// 显示分割线
.onAppear {
UITableView.appearance().separatorColor = .systemGray4
}
}
}
// MARK: - 回来
private var backToMineView: some View {
Button(action: {
// 回来上一页
}) {
Image(systemName: "arrow.backward.circle.fill")
.foregroundColor(Color.gray)
}
}
// MARK: - 拜访官网
private var toOurSiteView: some View {
Button(action: {
// 跳转官网
}) {
HStack {
Text("拜访官网")
.foregroundColor(Color.gray)
Spacer()
Image(systemName: "chevron.right")
.foregroundColor(.gray)
}
}
}
// MARK: - 前往隐私方针页面
private var toPrivacyPolicyView: some View {
Button(action: {
// 进入隐私方针页面
}) {
HStack {
Text("隐私方针")
.foregroundColor(Color.gray)
Spacer()
Image(systemName: "chevron.right")
.foregroundColor(.gray)
}
}
}
// MARK: - 前往用户协议页面
private var toUserAgreementView: some View {
Button(action: {
// 进入用户协议页面
}) {
HStack {
Text("用户协议")
.foregroundColor(Color.gray)
Spacer()
Image(systemName: "chevron.right")
.foregroundColor(.gray)
}
}
}
// MARK: - 前往Appstore评分页面
private var toAppstoreView: some View {
Button(action: {
// 前往Appstore评分页面
}) {
HStack {
Text("前往Appstore")
.foregroundColor(Color.gray)
Spacer()
Image(systemName: "chevron.right")
.foregroundColor(.gray)
}
}
}
// MARK: - 前往协助反应页面
private var toFeedbackView: some View {
Button(action: {
// 前往协助反应页面
}) {
HStack {
Text("用户反应")
.foregroundColor(Color.gray)
Spacer()
Image(systemName: "chevron.right")
.foregroundColor(.gray)
}
}
}
// MARK: - 前往关于页面
private var toAboutView: some View {
Button(action: {
// 前往关于页面
}) {
HStack {
Text("关于咱们")
.foregroundColor(Color.gray)
Spacer()
Image(systemName: "chevron.right")
.foregroundColor(.gray)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
以上便是本章的全部内容。
快来着手试试吧!
假如本专栏对你有协助,不妨点赞、谈论、重视~