iOS面试问题(快速)-第3部分

1.什么是封闭,我们可以在哪里使用?

  • 它们是自包含的代码块 ,可以在代码中传递和使用。
  • Swift中的闭包类似于C和Objective-C中的块以及 其他编程语言中的lambda
  • 它们与函数几乎相同,但不一定具有名称。
  • 无需声明每个参数的类型,如果这样做,则无需声明闭包的返回类型。

单击 链接 以了解所有类型的闭包语法。

2.什么是转义/不转义闭包?

@nonescaping闭包:(默认闭包)

  • 当在函数的参数中传递闭包时,请在函数主体执行并返回编译器之前使用它。
  • 函数结束时 ,传递的闭包超出范围,并且在内存中不再存在。

@转义闭包:

  • 在函数的参数中传递闭包时,请在函数体执行并返回编译器后使用它。
  • 函数结束时 ,传递的闭包的作用域存在并存在于内存中,直到执行闭包为止。 链接

3. 提到Swift中可用的集合类型是什么?

  • 数组 -用于按顺序存储相同类型的多个值。
  • -用于以无序方式存储相同类型的不同值。
  • 字典 —用于以无序方式存储具有键-值对关联的值。

4.如何在Swift中定义基类?

在Swift中,这些类不是从基类继承的,并且您在未指定其超类的情况下定义的类将自动成为基类。

5.什么是反初始化器以及如何用Swift编写?

在取消分配类实例之前立即声明一个反初始化器。 您使用deinit关键字编写反初始化器。 如果需要在取消分配对象之前执行某些操作或清理,请使用它。

例如 ,如果您创建一个自定义类来打开文件并向其中写入一些数据,则可能需要在释放该类实例之前关闭该文件。

反初始化器的编写没有任何括号 ,并且没有任何参数。

  deinit { 
//执行反初始化
}

6.双重问号“ ??”有什么用? ?

该运算符称为nil合并运算符 。当可选参数为nil时,我们使用它来提供默认值。

let a: String? = nil 
let b = "
let a: String? = nil
let b = "
nil合并运算符 "
let result = a ?? b
print(result) //output:"
"
let result = a ?? b
print(result) //output:"
"
let result = a ?? b
print(result) //output:"
nil合并运算符 "
  • 一种 ?? b取消包装可选的a(如果它包含一个值),或者返回默认值b(如果a为零)。
  • 表达式a始终是可选类型。 表达式b必须匹配存储在a内的类型。

6.’?有什么区别? 和’!’ ?

“?”标记

1.使用可选值时,您可以输入“?” 在操作之前,例如方法,属性和下标。

2.如果值在“?”之前 是零, “?”之后的所有内容 将被忽略,整个表达式的值为nil。

3.否则,可选值将被解包,并且“?”之后的所有内容 作用于未包装的值。

4.在两种情况下,整个表达式的值都是一个可选值。

“!”马克

1.一旦确定可选选项确实包含一个值,就可以通过在可选名称的末尾添加一个感叹号(!)来访问其基础值。

2.感叹号有效地表示:“我知道此可选选项肯定具有价值; 请使用它。”

3.仅在绝对确定隐式解开的可选项在首次访问时具有值的情况下使用。

7.在Swift中什么是类型别名?

类型别名声明将现有类型的命名别名引入程序。 类型别名声明是使用关键字typealias声明的。

类型别名=现有类型

  typealias StudentName =字符串 
 让名字:StudentName =“杰克” 

在Swift中,您可以对大多数类型使用typealias 。 它们可以是:

  • 内置类型 (例如:字符串,整数)
  • 用户定义的类型 (例如:类,结构,枚举)
  • 复杂类型 (例如:闭包)

8. Swift中的函数和方法有什么区别?

方法 —是与类,结构或枚举关联的函数。 这适用于实例方法和类型方法。

函数 —在全局范围内声明,不属于任何类型。

函数可以在类外部定义,也可以在类/结构/枚举内部定义,而方法必须在类/结构/枚举内部或部分定义。

9.外部参数的语法是什么?

外部参数 -允许我们命名函数参数以使其用途更加清楚。

函数功效(基数a:整数, 指数 b:整数)->整数

有时在调用函数时命名每个参数很有用,以指示传递给函数的每个参数的用途。

如果希望函数的用户在调用函数时提供参数名称,则除了本地参数名称外,还要为每个参数定义一个外部参数名称。

10. 您可以在Swift中重写结构和枚举吗?

我们不能继承struct / enum,无法覆盖。 因为,struct是值类型,所以编译器需要在编译时知道struct的确切大小,这是不可能的。

对于前面的部分,请单击链接Part1和Part2。有关封闭和有关属性的所有信息