iOS面试问题(快速)-第1部分
- Swift的优点是什么?
Swift是Apple Inc.为iOS ,macOS,watchOS,tvOS和Linux开发的通用,多范式, 编译时编程语言。
- 可读性 -简洁的语法,使阅读和编写变得更加容易。
- 维护 -更少的代码和更少的旧版-一个文件.swift。
- 更安全的平台 -您可以在编写代码时编译并修复错误。
- 高速 —令人难以置信的快速,高性能的LLVM编译器将Swift代码转换为优化的本机代码,以充分利用其设备。 还对语法和标准库进行了调整,以使代码发挥最佳性能。
- Swift支持动态库
- 开源的
2.解释类和结构之间的差异。
快速的类和结构之间主要有四个区别。 类具有以下结构没有的其他功能:
- 类型转换 :类型转换使您可以在运行时检查和解释类实例的类型。
- 引用计数允许对一个类实例进行多个引用。 (结构是值类型,类是引用类型。)
- 继承使一个类可以继承另一个类的特征。
- 使用反初始化程序 ,类的实例可以释放其分配的所有资源。
结构在您的代码中传递时总是被复制,并且不使用引用计数。 结构实例总是按值传递,而类实例总是按引用传递。
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为您代码中的实体提供了五种不同的访问级别 。
- 开放式访问 :具有开放式访问权限的类可以在定义它们的模块 内以及导入定义了该模块的任何模块 内被子类继承或覆盖。
- 公共访问 :具有公共访问权限的类只能在定义它们的模块内被子类继承或覆盖。
- 内部访问:允许实体在其定义模块的任何源文件中使用,但不能在该模块外部的任何源文件中使用。
- 文件专用访问: 将实体的使用限制为自己定义的源文件 。
- 专用访问:将实体的使用限制为封闭的声明以及同一文件中该声明的扩展名。
开放访问是最高(最低限制)访问级别,而私有访问是最低(最高限制)访问级别。
代码中的所有实体(有一些特定的例外)具有默认的内部访问级别。
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时,此信息都会有所不同。