Swift实用小册10:实例方法和类型方法的使用

简介: Swift实用小册10:实例方法和类型方法的使用

image.png

在本章中,你将学会实例方法和类型方法的使用。


前言


Apple官网或者网上分享的教程类文章不同,我将以实际开发角度讲述Swift语言的一些概念和用法,方便大家更好地学习和掌握Swift语言。

这同时也是对自己学习Swift语言过程的知识整理。


如有错误,以你为准。


我们新建一个SwiftUI项目,命名为SwiftUIPorperty

image.png

方法的概念


方法,实现某种业务逻辑的代码块。

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

image.png

科普一个知识点。

这里toMineView实例方法中,我们selectedTab参数使用了self属性。

self属性等同于这个实例本身,它是一个隐含属性,实际上我们也可以不表明selectedTab是实例本身的属性,如果我们不使用self指定的话,系统会自动判断你使用的参数都是它实例本身的属性。

那为什么我们要使用self属性呢?这是因为如果我们在写代码的时候,实例方法中的某个参数名称和实例中的某个参数一致的时候,我们可以使用self属性区分这个参数是实例方法的参数,还是实例中的参数,消除代码歧义,提高代码严谨性

好了,我们继续。


实例方法的调用


定义了方法后,如果我们需要调用方法,也调用属性的做法一致,使用【类+方法】进行调用。示例:


//实例方法的调用
@EnvironmentObject private var tabbarViewModel: TabbarViewModel
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
    tabbarViewModel.toMineView()
}


上述代码中,我们首先使用EnvironmentObject在视图之间共享数据,然后我们就可以直接使用tabbarViewModel内的参数或者方法,在实际代码中,我们使用在主线程执行.toMineView的方法,用的是点语法的形式。

image.png

类型方法的创建


实例方法是类的实例被调用的方法,而类型方法类型本身被调用的方法。

类型方法有两种使用场景,一种是应用于结构体,一种是应用于类,我们常用的是应用在结构体的场景。应用于结构体时,我们需要使用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参数,使用的也是点语法形式进行调用。

image.png

以上就是本章的全部内容。

快来动手试试吧!

相关文章
|
1月前
|
安全 开发工具 Swift
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发。基础语法涵盖变量、常量、数据类型、运算符、控制流等,高级特性包括函数、闭包、类、结构体、协议和泛型。
29 2
|
1月前
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
29 2
|
1月前
|
Swift 索引 容器
Swift 泛型-扩展泛型类型
Swift 泛型-扩展泛型类型
29 2
|
1月前
|
Swift 索引
Swift 泛型-类型约束
Swift 泛型-类型约束
26 1
|
1月前
|
Swift iOS开发
Swift 方法
10月更文挑战第29天
19 4
|
1月前
|
安全 Swift iOS开发
Swift 可选(Optionals)类型
10月更文挑战第24天
38 2
|
7月前
|
存储 安全 Swift
【Swift开发专栏】Swift中的集合类型:数组、字典与集合
【4月更文挑战第30天】本文探讨Swift的三种内置集合类型:数组、字典和集合。数组是有序元素集合,支持动态大小调整和类型安全;字典是无序键值对,适用于快速查找;集合是无序不重复元素集合,适合检查元素存在性和集合运算。理解这些特性和用法能提升Swift编程效率。
72 1
|
7月前
|
安全 Swift
【Swift开发专栏】Swift中的可选类型与解包
【4月更文挑战第30天】Swift的可选类型(Optional)用于表示变量可能无值,如用户未填写表单或空服务器数据。可选类型用问号(?)标记,状态可为包含值或nil。解包包括强制解包(!,可能触发运行时错误)、可选绑定(在if/while中安全解包)和隐式解包(声明时带!,使用时不需显式解包)。高级用法包括可选链式调用、空合并操作符(??)和可选类型比较。理解并恰当使用这些概念能提升代码的健壮性和安全性。
72 1
|
7月前
Swift4.0判断本函数是否在其它类有相同的方法
Swift4.0判断本函数是否在其它类有相同的方法
46 0
|
Swift
Swift 添加方法描述(文档注释)
在Swift里为一个方法添加文档描述很简单,只需要用///就可以了,如: /// Called when right button is clicked.
1113 0