作为视图控制器的成员变量这些数组之间的差异

作为视图控制器的成员变量这些数组之间的差异

问题描述:

我想有一个数组作为我的表视图控制器的成员。该数组将成为数据源。作为视图控制器的成员变量这些数组之间的差异

具有成员变量数组的下列方式有什么区别或优点/缺点?

class BinViewController: UITableViewController, WKNavigationDelegate { 
    var peopleArray1 = [String]() 
    var peopleArray2: [String] = [] 
    var peopleArray3: [String]! 
    var peopleArray4: [String]? 
+4

这是一个关于Swift和属性声明和初始化的基本问题。你读过Swift书吗?你对这四行代码有哪些具体问题?你不了解他们的差异究竟是什么?请澄清你的问题(不要发表评论)。 – rmaddy

这两个基本上做的是同一件事:

var peopleArray1 = [String]() 
var peopleArray2: [String] = [] 

他们声明和初始化[String]类型的空数组。


这两个在另一方面,也都差不多:

var peopleArray3: [String]! 
var peopleArray4: [String]? 

对他们俩的阵列本身可能是nil,他们目前是它们被声明。

区别在于peopleArray3是一个隐式解包的可选字符串数组,而peopleArray4是一个可选的字符串数组。

这对于peopleArray3意味着什么,是你告诉编译器,你将在它使用之前为它设置一个值。如果您尝试访问它的值为nil,则该应用程序将崩溃。

对于peopleArray4,你告诉编译器,这个阵列可能nil在任何时间,所以你需要检查,如果peopleArray4不是nil你访问它。

我认为没有你需要问自己的正确问题。没有优点或缺点。有许多方法可以根据你需要的和你想要实现的逻辑来初始化一个类的成员。

  • var peopleArray1 = [String]()你说的是编译器,请让我创建一个空字符串数组。 它被声明和初始化。同样你让编译器推断你的数组类型与第二条语句相比。

  • var peopleArray2: [String] = []它和你的第一个陈述有99%的相同之处。你正在创建一个空的String数组。宣布并初始化。这里唯一的区别是你指定数组的类型。你不要让编译器推断你的数组的类型。 var variable:TypeVariable = ...我们建议由苹果让编译器推断出你的成员变量的类型时,你可以因为你赢得了可读的代码

  • var peopleArray3: [String]!它比以前的2个初始化相当不同。首先,你需要知道Swift是一种非常强类型的语言,你需要在使用它之前初始化每个变量。你可以尝试的一件事是尝试做出没有!要么 ?你的编译器会提出一个问题警告你。有时你只是不知道什么是初始价值,但你在某个时刻就会知道,你会有价值。一个变量是这两种可能的状态:没有值或值被称为选项。有了这个声明,你说我想创建一个可能为零或可能有一些字符串值的字符串数组。如果你打印你的数组,你会有一个消息,如“可选([String])”。要获得“可选”的值,只有当您确定自己的值为时,才需要用感叹号解开它。如果没有,你的程序将会崩溃。在这个初始化过程中,您要求编译器不要担心,因为您知道将来您的阵列将具有一些值。

  • var peopleArray4: [String]?与前一个相同。主要的区别是,每次你想访问peopleArray的价值时,你需要用一个感叹号来打开他的价值。 只有使用可选项的逻辑没有优势/劣势。如果你的数组可能是零和进一步有值或是一个静态数组...