面试-关于Swift的10个问题。 第一部分

敬礼,哈布里沃派! 五月已经结束,我们将继续开设新课程。 本文专门介绍“ iOS-developer”课程的开始。 培训将于5月28日开始,在此之前,您将有机会进一步了解Swift语言及其功能。 这是三篇文章的第一篇,其中以面试形式检查了Swift语言的优点和功能,并在我们的课程中教导了如何创建iOS应用程序。




什么是Swift,它有什么用?


Swift是Apple开发的一种通用的多范式编程语言,用于为iOS,macOS,watchOS,tvOS甚至Linux开发解决方案。

  • 可读性 -Swift具有非常干净简洁的语法,易于编写和阅读。
  • 易于支持 -输出少了代码和继承级别,整个项目变成了单个swift文件。
  • 安全的平台 -在编写代码时立即编译和修复错误。
  • 高速 -令人难以置信的快速高效的LLVM编译器将Swift代码转换为本机代码,以充分利用设备。 语法本身和标准库也经过优化,可快速工作。
  • 支持动态库
  • 开源

类和结构有什么区别?


Swift中的类和结构之间有四个主要区别。 类具有一些结构所没有的功能:

  • 类型转换 -允许您在运行时检查和解释类。
  • 链接计数 -允许您为该类的每个实例使用多个链接。
  • 继承 -允许一个类继承另一个类的特征。
  • 反初始化程序 -允许类的每个实例释放分配给它的所有资源。

在代码中传递结构时,总是在不引用计数的情况下复制它们。 结构的实例始终按值传递,而类的实例始终按引用传递。

在哪种情况下使用类,以及在哪种结构中?


作为简单的备忘单:当满足以下一个或多个条件时,应使用结构。

  • 该结构的目的是封装几个相对简单的数据值。
  • 封装的值可以期望被复制而不是被引用;
  • 存储在结构中的属性本身就是值类型,这些值类型也会被复制而不是引用;
  • 结构不得继承其他现有类型的属性和行为。

在其他情况下,使用类:定义一个类,创建一个实例来管理并通过引用传递。

如何将变量作为链接传递?


可以使用inout参数将变量作为参考传递。 Inout表示更改局部变量也将更改传递的参数。

var value: String = “Applefunc changeString(newValue:inout String) { newValue = “Samsungprint(newValue) // Output:Samsung print(value) // Output:Samsung } changeString(newValue:&value) 


什么是模块?


  • 模块是代码分发中的独立单元;
  • 一个平台或应用程序,它作为一个单独的单元创建和分发,并且可以由另一个模块导入;
  • 每个构建目标-Xcode中的应用程序包或框架都被视为一个单独的模块。

Swift中访问级别有什么区别?


Swift对代码中的实体有五个不同的访问级别:

  • 开放访问 -具有开放访问权限的类可以是子类,也可以被定义它们的模块中的子类覆盖,也可以被导入定义它们的模块中的任何其他子类覆盖;
  • 公共访问 -具有公共访问权限的类可以是子类,也可以仅在定义它们的模块内被子类覆盖;
  • 内部访问 -实体可以在定义模块中的任何源文件中使用,但不能在该模块外部的源文件中使用;
  • 文件专用访问 -实体的使用受到其自己定义的源文件的限制;
  • 私有访问 -实体的使用受附加声明和此声明扩展的限制,它们位于同一文件中。

开放访问是最高级别且受限制最少的级别,私有访问是最低级别且因此受限制最多的级别。 默认情况下,代码中的所有实体都具有内部访问级别。

什么是延迟初始化?


延迟初始化是一种将对象的创建或另一个过程的执行延迟到需要该过程之前的技术。 延迟只能与类和结构一起使用。 但是,应该理解, 惰性属性并不安全,因为它不会自动初始化。

您始终需要使用varlazy属性声明为变量。 常量的属性在初始化完成之前应始终具有一个值,因此不能延迟它们。

什么是元组?


元组是一组零个或多个表示为单个值的值。 它们通常用于从调用函数返回多个值。 Swift有两种元组。

名称车队

 let nameAndAge = (name:”Midhun”, age:7) Access the values like: nameAndAge.name //Output: Midhun nameAndAge.age //Output: 7 


无名车队
在这种类型的元组中,我们不为元素指定名称。

 let nameAndAge = (“Midhun”, 7) Access the values like: nameAndAge.0 //Output: Midhun nameAndAge.1 //Output: 7 


什么是转账?


使用该枚举,可以确定一组相关值的通用类型,并提供在代码中安全使用这些值的能力。 与C和Objective-C不同,在Swift中,枚举在创建时未分配整数默认值。

什么是相关值?


关联值与与列举情况之一关联的变量非常相似。

 enum Barcode { case upc(Int, Int, Int, Int) case qrCode(String) } 


我们确定条形码枚举的类型,该枚举可以采用具有类型关联值(Int,Int,Int,Int)的upc值,也可以采用具有String类型关联值的qrCode值。

有时,在案例值旁边存储其他类型的相关值的功能可能会很有用。 这使您可以将其他用户信息与案例值一起存储,并允许您每次在代码中使用此案例时都可以更改此信息。

第一部分结束。
第二部分。

我们邀请所有人参加免费的网络研讨会 ,我们将在此告诉您本课程将教给您什么。

Source: https://habr.com/ru/post/zh-CN451854/


All Articles