在本章中,你将以实际案例出发,来了解
Swift
语言的一些基础知识点,当你对这些基础概念有所了解后,往后将更加容易读懂和设计代码。
前言
和Apple官网或者网上分享的教程类文章不同,我将以实际开发角度讲述
Swift
语言的一些概念和用法,方便大家更好地学习和掌握
Swift
语言。
这同时也是对自己学习
Swift
语言过程的知识整理和输出。
如有错误,以你为准。
参数声明
在
iOS
开发过程中,我们常常需要提前声明好常量和变量,方便在之后的代码中进行引用。
常量
常见的MVVM开发模式中,我们可以创建一个
Constants.swift
文件,将我们在
App
开发中用到的常量进行声明。
以下面的代码为例:
import SwiftUI
public struct Constants {
//底部导航栏页面名称
public static let homeViewName = “首页"
public static let mineViewName = "我的"
}
在上面的例子中,我们使用
let
来声明
homeViewName
、
mineViewName
两个常量,它们的值分别是首页、我的。
常量表示着我们这两个参数的值是不变的,也就是
homeViewName
所对应的值“首页”,在
App
中就是固定叫做首页,而不会中途更新为别的值。
变量
不变的是常量,而在开发过程中可能会被赋予新的值,这个叫做变量,以登录页面为例:
//是否展示提示Toast
var showToast = false
var showToastMessage = "登录成功"
我们使用
var
声明了
showToast
、
showToastMessage
两个变量,它们的值分别是
false
、“
登录成功
”。
这里我们为什么要定义变量而不是常量,是因为这两个参数的值是会随着规则而变化。
我们默认是不展示
Toast
,也就是
showToast
的值默认为
false
,当我们业务上将
showToast
重新赋值为
true
时,此时业务状态可能有两种:登录成功、登录失败。
那么在登录失败的情况下,
showToastMessage
展示的文字就不是“
登录成功
”了,有可能是“
请输入账号
”、“
请输入密码
”。
因此这里我们
showToast
、
showToastMessage
两个变量,我们就会使用
var
进行声明。
小结:使用let声明常量,常量的值基本不变,使用var声明变量,变量可以在不同业务下赋予新的值。
数据类型
在我们声明常量或者变量时,
Swift
是自动根据参数的值来判断类型的,示例:
//版本号
let versionNumber = “1.0.0"
虽然我们没有给
versionNumber
标明是什么类型,但
Swift
根据参数的值判断出了
versionNumber
是
String
字符串类型。
另外,我们也可以自己声明好参数的类型,把参数加上类型注解。
在
MVC
或者
MVVM
开发模式中,
Model
的部分,我们就需要为声明的常量/变量添加类型注解,因为它们是没有初始值的。
import SwiftUI
struct Model: Identifiable{
var number: Int
var title: String
var image: UIImage
var enableUsed: Bool
在上面的例子中,我们声明了
4
个变量:
number
、
title
、
image
、
enableUsed
,其中
number
是
Int
整型,
title
是
String
字符串类型,
image
是
UIImage
图片类型,
enableUsed
是
Bool
布尔类型。
另外一个知识点是,一旦定义了参数类型后,在后面我们就不能更改它的类型,而对于常量来说,除了类型不能更改外,值也不能更改。
如果我们想声明一个指定类型的参数时,我们可以指定获得的类型。
let pointNumber = 2.1
let intNumber = Int(pointNumber)
print("\(intNumber)”)
//输出的结果为2
小结:没有声明参数类型时,Swift会自动根据参数值判断参数类型,变量、常量类型不能直接更改,常量的值也不能更改。
命名方式
在实际开发过程中,无论是声明的参数、结构体、还是页面名称,我们在命名的时候需要遵照一定的原则。
常见的命名方式为“
驼峰命名法
”,也就是开始单词为小写,后面组合的单词为写。示例:
showToastMessage
。
一般我们命名页面也好,方法也好,声明参数也罢,建议使用英文单词组合,当然
Swift
也支持中文、
emoji
,例如:
//不建议的声明方式
let 我喜欢的 = “你"
let 😊 = ""
但实际开发中,为了
统一规范
,建议都还使用
英文
进行命名。
代码注释
代码注释一般会出现在两种业务场景,一是代码块命名,我们使用“
//
”进行注释,注释的部分不参与运算。
//标题&LOGO
private var loginImageView: some View {
VStack(spacing: 20) {
Image(Constants.appLogo)
.resizable()
.frame(width: 80, height: 80)
.cornerRadius(8)
Text(Constants.appName)
.font(.system(size: 17))
.foregroundColor(.black)
}
}
另一种是多行注释,使用“
/*注释内容*/
”,常常用在实现方法的解释,或者注释这个代码块。
/*
下面的方法是跳转到AppStore
先声明URL地址,然后带着App的appid执行跳转AppStore的逻辑
*/
func gotoAppStore(appId: String) {
let urlPrex = "itms-apps"
let appUrl = urlPrex + "://itunes.apple.com/app/id" + appId
let appNsUrl = NSURL(string: appUrl)
UIApplication.shared.open(appNsUrl! as URL, options: [:], completionHandler: nil)
}