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

  1. Swift的优点是什么?

Swift是Apple Inc.为iOS ,macOS,watchOS,tvOS和Linux开发的通用,多范式, 编译时编程语言。

  • 可读性 -简洁的语法,使阅读和编写变得更加容易。
  • 维护 -更少的代码和更少的旧版-一个文件.swift。
  • 更安全的平台 -您可以在编写代码时编译并修复错误。
  • 高速 —令人难以置信的快速,高性能的LLVM编译器将Swift代码转换为优化的本机代码,以充分利用其设备。 还对语法和标准库进行了调整,以使代码发挥最佳性能。
  • Swift支持动态库
  • 开源的

2.解释类和结构之间的差异。

快速的类和结构之间主要有四个区别。 类具有以下结构没有的其他功能:

  1. 类型转换 :类型转换使您可以在运行时检查和解释类实例的类型。
  2. 引用计数允许对一个类实例进行多个引用。 (结构是值类型,类是引用类型。)
  3. 继承使一个类可以继承另一个类的特征。
  4. 使用反初始化程序 ,类的实例可以释放其分配的所有资源。

结构在您的代码中传递时总是被复制,并且不使用引用计数。 结构实例总是按传递,而类实例总是按引用传递。

3.何时使用类和何时使用struct?

作为一般准则,请考虑在以下一个或多个条件适用时创建结构:

  • 结构的主要目的是封装一些相对简单的数据值。
  • 合理的是,当您分配或传递该结构的实例时,将封装的值复制而不是引用
  • 结构存储的任何属性本身都是值类型,也应该期望将其复制而不是引用。
  • 该结构不需要从另一个现有类型继承属性或行为

在所有其他情况下,定义一个类,并创建该类的实例以通过引用进行管理和传递。

4.如何传递变量作为参考?

我们可以使用inout参数将变量作为参考传递。 inout表示修改局部变量也将修改传入的参数。

var值:字串=“ Apple”

func changeString(newValue:inout String){
newValue =“三星”
print(newValue) //输出:三星
打印(值) //输出:三星
}

changeString(newValue:&value)

5.什么是swift模块?

  • 模块是代码分发的单个单元。
  • 框架或应用程序是作为一个整体构建和交付的,可以由另一个模块使用Swift的 import关键字导入。
  • Xcode中的每个构建目标(例如应用程序捆绑包或框架) 在Swift中都被视为一个单独的模块

6.快速访问中有哪些不同的访问级别?

Swift为您代码中的实体提供了五种不同的访问级别

  1. 开放式访问 :具有开放式访问权限的类可以在定义它们的模块 内以及导入定义了该模块的任何模块 被子类继承或覆盖
  2. 公共访问 具有公共访问权限的类只能在定义它们的模块内被子类继承或覆盖
  3. 内部访问:允许实体在其定义模块的任何源文件中使用,但不能在该模块外部的任何源文件中使用。
  4. 文件专用访问: 将实体的使用限制为自己定义的源文件
  5. 专用访问:将实体的使用限制为封闭的声明以及同一文件中该声明的扩展名。

开放访问是最高(最低限制)访问级别,而私有访问是最低(最高限制)访问级别。

代码中的所有实体(有一些特定的例外)具有默认的内部访问级别。

7. 在Swift中解释懒惰?

延迟初始化 -延迟对象或某些其他昂贵过程的创建直到需要它的技术。 这些属性只能与class和struct成员一起使用。惰性属性由于未自动初始化,因此不是线程安全的。

您必须始终将惰性属性声明为变量(使用var关键字)。

常数属性初始化完成之前必须始终具有一个值,因此不能声明为惰性的。

8.什么是快速元组?

元组是一组零个或多个值,表示为一个值。 它们通常用于从函数调用中返回多个值。

元组=字典(可以动态创建)+结构(保存非常具体的数据类型)

快速的元组有两种

1,命名元组

let nameAndAge =(姓名:“ Midhun”,年龄:7)

访问类似的值:

nameAndAge.name //输出:Midhun

nameAndAge.age //输出:7

2.未命名的元组

在未命名元组中,我们没有为其元素指定名称。

让nameAndAge =(“ Midhun”,7)

访问类似的值:

nameAndAge.0 //输出:Midhun

nameAndAge.1 //输出:7

9.什么是枚举?

枚举为一组相关值定义一个通用类型,并使您能够在代码中以类型安全的方式使用这些值。

与C和Objective-C不同,Swift枚举案例在创建时未分配默认的整数值。

10.什么是关联值

关联值更像是变量,与枚举情况之一关联。

枚举条形码{

case upc(Int,Int,Int,Int)

大小写qrCode(String)

}

“定义一个称为Barcode的枚举类型,该枚举类型可以采用具有关联类型(Int,Int,Int,Int)upc值,也可以具有具有String类型的关联值的qrCode值。”

能够与案例值一起存储其他类型的关联值有时很有用。

使您可以将其他自定义信息与case值一起存储 ,并允许每次在代码中使用该case时,此信息都会有所不同。

对于其他部分,请单击链接Part2&Part3&All About Closure和All About Properties。