在本章中,你将学会实例方法和类型方法的使用。
前言
和Apple
官网或者网上分享的教程类文章不同,我将以实际开发角度讲述Swift
语言的一些概念和用法,方便大家更好地学习和掌握Swift
语言。
这同时也是对自己学习Swift
语言过程的知识整理。
如有错误,以你为准。
我们新建一个SwiftUI
项目,命名为SwiftUIPorperty
。
方法的概念
方法,实现某种业务逻辑的代码块。
在Swift
开发过程中,方法的使用尤其重要。为了保持代码的优雅知性,我们常常会把业务逻辑操作全部抽离出来,然后在需要的地方调用方法即可。方法在使用上可以分为实例方法和类型方法。
实例方法的创建
实例方法可以通过访问和修改实例属性的方式,来实现实例的相关功能。这里我们用实际开发中的MVVM
模式来做示例。示例:
//实例方法 import SwiftUI import Combine class TabbarViewModel: ObservableObject { @Published var selectedTab:Int = 0 @Published var isVip:Bool = false @Published var isEdit:Bool = false //跳转到mineView func toMineView() { self.selectedTab = 1 } }
上述代码中,我们定义了一个TabbarViewModel
类,它遵循ObservableObject
协议。在TabbarViewModel
类中,我们声明了三个变量:selectedTab、isVip、isEdit
。我们给三个变量赋予了类型属性和初始值。
然后,我们定义了一个toMineView
实例方法,调用这个实用方法时,selectedTab
重新赋值为1
。
科普一个知识点。
这里toMineView
实例方法中,我们selectedTab
参数使用了self
属性。
self
属性等同于这个实例本身,它是一个隐含属性,实际上我们也可以不表明selectedTab
是实例本身的属性,如果我们不使用self
指定的话,系统会自动判断你使用的参数都是它实例本身的属性。
那为什么我们要使用self
属性呢?这是因为如果我们在写代码的时候,实例方法中的某个参数名称和实例中的某个参数一致的时候,我们可以使用self
属性区分这个参数是实例方法的参数,还是实例中的参数,消除代码歧义,提高代码严谨性。
好了,我们继续。
实例方法的调用
定义了方法后,如果我们需要调用方法,也调用属性的做法一致,使用【类+方法】进行调用。示例:
//实例方法的调用 @EnvironmentObject private var tabbarViewModel: TabbarViewModel DispatchQueue.main.asyncAfter(deadline: .now() + 1) { tabbarViewModel.toMineView() }
上述代码中,我们首先使用EnvironmentObject
在视图之间共享数据,然后我们就可以直接使用tabbarViewModel
内的参数或者方法,在实际代码中,我们使用在主线程执行.toMineView
的方法,用的是点语法的形式。
类型方法的创建
实例方法是类的实例被调用的方法,而类型方法类型本身被调用的方法。
类型方法有两种使用场景,一种是应用于结构体,一种是应用于类,我们常用的是应用在结构体的场景。应用于结构体时,我们需要使用static
声明。示例:
import SwiftUI struct Constants { static let webSiteName = "访问官网" static let privacyPolicyViewName = "隐私政策" static let userAgreementViewName = "用户协议" static let appstoreViewName = "去App Store评分" static let feedbackView = "帮助与反馈" static let aboutViewName = "关于我们" }
上述代码中,我们创建了一个Constants
结构体,然后使用static
关键字和let
声明了一些常量,并赋予了初始值。这里的Constants
就是一个类型方法。
类型方法的调用
我们在实际业务中调用的是Constants
结构体本身。示例:
// MARK: - 访问官网 private var toOurSiteView: some View { Button(action: { guard let url = URL(string: Utils.webSite), UIApplication.shared.canOpenURL(url) else { return } UIApplication.shared.open(url as URL) }) { HStack { Text(Constants.webSiteName) .foregroundColor(Constants.blackColor) Spacer() Image(systemName: Constants.rightButton) .foregroundColor(.gray) } } }
上述代码中,我们实现了一个跳转打开浏览器的一个操作,在这个操作的样式部分,也就是HStack
里面,我们Text
文字就调用Constants
结构体中的webSiteName
参数,使用的也是点语法形式进行调用。
以上就是本章的全部内容。
快来动手试试吧!