Swift学习笔记之基础知识

本文详细介绍了Swift编程语言的基础知识,包括常量和变量的声明、类型注释、命名规则、打印和注释,以及整数、浮点数、类型安全和类型推断的概念。此外,还讲解了元组、可选类型及其用法,如可选绑定和强制解包,以及错误处理机制。通过对这些基础知识的学习,读者可以快速入门Swift编程。
摘要由CSDN通过智能技术生成

基础知识

Swift 是一种用于 iOS、macOS、watchOS 和 tvOS 应用程序开发的新编程语言。尽管如此,根据您使用 C 和 Objective-C 进行开发的经验,您将熟悉 Swift 的许多部分。

雨燕提供了自己的所有基本C和Objective-C类型的版本,包括Int为整数,DoubleFloat为浮点值,Bool布尔值,并String为文本数据。Swift 还提供了三种主要集合类型ArraySet、 和 的强大版本Dictionary,如集合类型 中所述

与 C 一样,Swift 使用变量来存储和通过标识名称引用值。Swift 还广泛使用了无法更改其值的变量。这些被称为常量,并且比 C 中的常量强大得多。当您使用不需要更改的值时,常量在整个 Swift 中使用以使代码更安全、更清晰。

除了熟悉的类型之外,Swift 还引入了 Objective-C 中没有的高级类型,例如元组。元组使您能够创建和传递值的分组。您可以使用元组将函数中的多个值作为单个复合值返回。

Swift 还引入了可选类型,用于处理没有值的情况。选配说要么“有一个值,它等于X ”或“有没有一个价值可言”。使用可选项类似于nil在 Objective-C 中使用指针,但它们适用于任何类型,而不仅仅是类。可选项不仅比nilObjective-C 中的指针更安全和更具表现力,而且它们是 Swift 中许多最强大功能的核心。

Swift 是一种类型安全的语言,这意味着该语言可以帮助您明确代码可以使用的值的类型。如果您的代码的一部分需要String,类型安全可以防止您Int错误地传递它。同样,类型安全可防止您意外地将 optional 传递String给需要非可选String. 类型安全可帮助您在开发过程中尽早发现和修复错误。

常量和变量

常量和变量将名称(例如maximumNumberOfLoginAttemptswelcomeMessage)与特定类型的值(例如数字10或字符串"Hello")相关联。常量的值一旦设置就不能更改,而变量可以在将来设置为不同的值。

声明常量和变量

常量和变量必须在使用前声明。用let关键字声明常量,用关键字声明变量var。下面是一个示例,说明如何使用常量和变量来跟踪用户进行的登录尝试次数:

  1. 1. let maximumNumberOfLoginAttempts = 10
    2. var currentLoginAttempt = 0
    

这段代码可以读作:

“声明一个名为 的新常量maximumNumberOfLoginAttempts,并赋予它一个值10。然后,声明一个名为 的新变量currentLoginAttempt,并为其赋予初始值0。”

在此示例中,允许的最大登录尝试次数声明为常量,因为最大值永远不会改变。当前登录尝试计数器被声明为一个变量,因为该值必须在每次登录尝试失败后递增。

您可以在一行中声明多个常量或多个变量,用逗号分隔:

  1. var x = 0.0, y = 0.0, z = 0.0
    

笔记

如果代码中存储的值不会更改,请始终使用let关键字将其声明为常量。变量仅用于存储需要能够更改的值。

类型注释

您可以在声明常量或变量时提供类型注释,以明确常量或变量可以存储的值类型。通过在常量或变量名称之后放置一个冒号,然后是一个空格,然后是要使用的类型的名称来编写类型注释。

此示例为名为 的变量提供了类型注释welcomeMessage,以指示该变量可以存储String值:

  1. var welcomeMessage: String

声明中的冒号表示“……类型……”,因此上面的代码可以理解为:

“声明一个welcomeMessage类型为 的变量String。”

短语“of type String”的意思是“可以存储任何String值”。将其视为可以存储的“事物的类型”(或“事物的种类”)。

welcomeMessage现在可以将该变量设置为任何字符串值而不会出错:

  1. welcomeMessage = “Hello”

您可以在一行中定义多个相同类型的相关变量,以逗号分隔,并在最终变量名称后使用单个类型注释:

  1. var red, green, blue: Double

笔记

在实践中很少需要编写类型注释。如果您在定义常量或变量时为其提供初始值,Swift 几乎总能推断出要用于该常量或变量的类型,如类型安全和类型推断中所述。在welcomeMessage上面的例子中,没有提供初始值,所以welcomeMessage变量的类型是用类型注释指定的,而不是从初始值推断出来的。

命名常量和变量

常量和变量名称几乎可以包含任何字符,包括 Unicode 字符:

  1. let π = 3.14159
  2. let 你好 = “你好世界”
  3. let 🐶🐮 = “dogcow”

常量和变量名称不能包含空格字符、数学符号、箭头、专用 Unicode 标量值或线条和方框图字符。它们也不能以数字开头,尽管数字可能包含在名称的其他地方。

一旦声明了某个类型的常量或变量,就不能再用相同的名称声明它,也不能将其更改为存储不同类型的值。你也不能把一个常数变成一个变量或一个变量变成一个常数。

笔记

如果您需要为常量或变量赋予与 Swift 保留关键字相同的名称,请```在将其用作名称时用反引号 ( )将关键字括起来。但是,除非您绝对别无选择,否则请避免使用关键字作为名称。

您可以将现有变量的值更改为兼容类型的另一个值。在本例中, 的值friendlyWelcome从 更改"Hello!""Bonjour!"

  1. 1. var friendlyWelcome = "Hello!"
    2. friendlyWelcome = "Bonjour!"
    3. // friendlyWelcome is now "Bonjour!"
    

与变量不同,常量的值在设置后不能更改。尝试这样做会在编译代码时报告为错误:

  1. 1. let languageName = "Swift"
    2. languageName = "Swift++"
    3. // This is a compile-time error: languageName cannot be changed.
    

打印常量和变量

您可以使用以下print(_:separator:terminator:)函数打印常量或变量的当前值:

  1. 1. print(friendlyWelcome)
    2. // Prints "Bonjour!"
    

print(_:separator:terminator:)函数是一个全局函数,可将一个或多个值打印到适当的输出。例如,在 Xcode 中,该print(_:separator:terminator:)函数在 Xcode 的“控制台”窗格中打印其输出。该separatorterminator参数都有默认值,这样你就可以当你调用这个函数忽略它们。默认情况下,该函数通过添加换行符来终止它打印的行。要打印一个没有换行符的值,请传递一个空字符串作为终止符——例如,. 有关具有默认值的参数的信息,请参阅默认参数值print(someValue, terminator: "")

Swift 使用字符串插值将常量或变量的名称作为占位符包含在较长的字符串中,并提示 Swift 将其替换为该常量或变量的当前值。将名称括在括号中,并在左括号前用反斜杠将其转义:

  1. 1. print("The current value of friendlyWelcome is \(friendlyWelcome)")
    2. // Prints "The current value of friendlyWelcome is Bonjour!"
    

笔记

你可以用串插中使用的所有选项中描述字符串插值

注释

使用注释在代码中包含不可执行的文本,作为对自己的注释或提醒。编译代码时,Swift 编译器会忽略注释。

Swift 中的注释与 C 中的注释非常相似。单行注释以两个正斜杠 ( //)开头:

  1. // This is a comment.
    

多行注释以正斜杠开头,后跟星号 ( /*),以星号结尾,后跟正斜杠 ( */):

  1.  /* This is also a comment
     but is written over multiple lines. */
    

与 C 中的多行注释不同,Swift 中的多行注释可以嵌套在其他多行注释中。您可以通过启动一个多行注释块然后在第一个块中启动第二个多行注释来编写嵌套注释。然后关闭第二个块,然后关闭第一个块:

  1. /* This is the start of the first multiline comment.
     /* This is the second, nested multiline comment. */
    This is the end of the first multiline comment. */
    

嵌套的多行注释使您能够快速轻松地注释掉大块代码,即使代码已经包含多行注释。

分号

与许多其他语言不同,Swift 不要求您;在代码中的每个语句之后编写分号 ( ),尽管您可以根据需要这样做。但是,如果要在一行中编写多个单独的语句,需要分号:

  1. 1. let cat = "🐱"; print(cat)
    2. // Prints "🐱"
    

整数

整数是没有小数部分的整数,例如42-23。整数有符号(正、零或负)或无符号(正或零)。

Swift 提供 8、16、32 和 64 位形式的有符号和无符号整数。这些整数遵循类似于 C 的命名约定,其中 8 位无符号整数的类型为UInt8,而 32 位有符号整数的类型为Int32。与 Swift 中的所有类型一样,这些整数类型的名称大写。

整数边界

您可以使用其minmax属性访问每个整数类型的最小值和最大值:

  1. 1. let minValue = UInt8.min  // minValue is equal to 0, and is of type UInt8
    2. let maxValue = UInt8.max  // maxValue is equal to 255, and is of type UInt8
    

这些属性的值是适当大小的数字类型(例如UInt8在上面的示例中),因此可以在表达式中与相同类型的其他值一起使用。

整数

在大多数情况下,您不需要选择特定大小的整数来在您的代码中使用。Swift 提供了一个额外的整数类型,Int,它的大小与当前平台的原生字大小相同:

  • 在 32 位平台上,IntInt32.
  • 在 64 位平台上,IntInt64.

除非您需要使用特定大小的整数,否则请始终Int在代码中使用整数值。这有助于代码一致性和互操作性。即使在 32 位平台上,Int也可以存储-2,147,483,648和之间的任何值2,147,483,647,并且对于许多整数范围来说都足够大。

用户界面

Swift 还提供了一个无符号整数类型,UInt它的大小与当前平台的原生字大小相同:

  • 在 32 位平台上,UIntUInt32.
  • 在 64 位平台上,UIntUInt64.

笔记

UInt仅当您特别需要与平台的本机字大小相同大小的无符号整数类型时才使用。如果不是这种情况,Int则是首选,即使要存储的值已知为非负值也是如此。一致使用Intfor 整数值有助于代码互操作性,避免在不同数字类型之间进行转换的需要,并匹配整数类型推断,如类型安全和类型推断中所述

浮点数字

浮点数是具有小数部分的数字,例如3.141590.1,和-273.15

浮点类型可以表示比整数类型更广泛的值,并且可以存储比Int. Swift 提供了两种有符号浮点数类型:

  • Double 表示 64 位浮点数。
  • Float 表示一个 32 位浮点数。

笔记

Double具有至少 15 位十进制数字的精度,而 的精度Float可以低至 6 位十进制数字。要使用的适当浮点类型取决于您需要在代码中使用的值的性质和范围。在任何一种类型都合适的情况下,Double是首选。

类型安全和类型推断

Swift 是一种类型安全的语言。类型安全语言鼓励您明确代码可以使用的值类型。如果您的代码的一部分需要String,则不能Int错误地传递它。

因为 Swift 是类型安全的,所以它在编译代码时会执行类型检查,并将任何不匹配的类型标记为错误。这使您能够在开发过程中尽早发现和修复错误。

类型检查可帮助您在处理不同类型的值时避免错误。但是,这并不意味着您必须指定您声明的每个常量和变量的类型。如果你没有指定你需要的值的类型,Swift 会使用类型推断来计算出合适的类型。类型推断使编译器能够在编译您的代码时自动推断特定表达式的类型,只需检查您提供的值即可。

由于类型推断,Swift 需要的类型声明比 C 或 Objective-C 等语言少得多。常量和变量仍然是显式类型的,但是指定它们的类型的大部分工作已经为您完成了。

当您使用初始值声明常量或变量时,类型推断特别有用。这通常是通过在您声明常量或变量时为常量或变量分配一个文字值(或文字)来完成的。(文字值是直接出现在源代码中的值,如下面的423.14159

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值