首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

iOS面试题-Swift篇

属于深拷贝(deep copy) 值类型: 比如结构体,枚举,是在栈空间上存储和操作的 引用类型 引用类型只会使用引用对象的一个"指向"; 赋值给var、let或者给函数传参,是将内存地址拷贝一份,类似于制作一个文件的替身...class 有以下功能,struct 是没有的:* class可以继承,子类可以使用父类的特性和方法 类型转换可以在运行时检查和解释一个实例对象 class可以用 deinit来释放资源 一个类可以被多次引用...来定义一个可选型 值类型或者引用类型都可以是可选型变量 泛型主要是为增加代码的灵活性而生的,它可以是对应的代码满足任意类型的的变量或方法; 泛型可以将类型参数化,提高代码复用率,减少代码量 它们遵循的基本规则...当闭包作为一个实际参数传递给一个函数或者变量的时候,我们就说这个闭包逃逸了,可以在形式参数前写 @escaping 来明确闭包是允许逃逸的。...初始化器的相互调用规则 指定初始化器必须从它的直系父类调用指定初始化器 便捷初始化器必须从相同的类里调用另一个初始化器 便捷初始化器最终必须调用一个指定初始化器什么可选链?

3.6K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    module & Swift库

    静态库 在Xcode 9之后,Swift开始⽀持静态库 Swift没有头⽂件的概念,外界如何使⽤Swift中public修饰的类和函数?...静态库中的LGSwiftTeacher类,可以在OC下正常使用 但此时还有另一个问题: 在LGSwiftTest.swift中,使用import导入LGSwiftA,还是编译报错 在Swift中,...静态库中的LGSwiftTeacher类,可以在Swift下正常使用 在LGSwiftA.framework和LGSwiftB.framework两个静态库中,都存在LGSwiftTeacher,有时甚至会存在头文件相同的情况...,在Swift中使用符合预期 但另一个问题又出现了: 通过指定宏的方式,需要修改原有代码。...如果一个使用OC开发的SDK需要适配Swift,需要为每一个方法或属性指定宏,这将是工程浩大且费时费力的事情 解决办法: 使用.apinotes文件,代替宏的方式 在OCFramework目录下,创建OCFramework.apinotes

    2.1K45

    Swift讲解专题十——类与结构体 原

    Swift讲解专题十——类与结构体 一、引言         Swift中的类与结构体十分相似,和Objective-C不同的是,Swift中的结构体不仅可以定义属性,也可以像类一样为其定义方法。        ...Swift中的类与结构体有如下相似点: 1.定义属性来存储值。 2.定义函数来提供功能。 3.通过定义下标语法使用下标的方式取值。 4.定义构造方法来对其进行初始化。...当然类和结构体也有许多不同点,下面这些功能是类独有的,结构体没有: 1.通过继承来创建类的子类。 2.在运行时允许对类的实例进行类型的检查和解释。 3.析构方法可以释放被类引用的资源。...MyStruct { var param1:Int var param2:String } //创建类的实例 var obj1 = MyClass() //创建结构体的实例 所有结构体会默认生成一个逐个设置属性的构造方法...通过实例间的传递,可以证明Swift中类被引用于结构体被复制这样的特点,示例如下: //将类实例传递给另一个变量 var obj3 = obj1 //将结构体实例传递给另一个变量 var obj4 =

    38720

    【面试必备】Swift 面试题及其答案

    注意:在运行时,结构体的在性能方面更优于类,原因是结构体的方法调用是静态绑定,而类的方法调用是动态实现的。这就是尽可能得使用结构体代替类的又一个好的原因。 问题3- 什么是泛型?...---- 1、泛型类 2、泛型结构体 3、泛型协议 答案: Swift 包含 1 和 2 特性。 泛型可以在类、结构体、枚举、全局函数或者方法中使用。 3 是通过 typealias 部分实现的。...谨记它的的值只能被分配一次。 问题4- static 或者 class 修饰符 ---- 声明一个静态属性或者函数,我们常常使用值类型的 static 修饰符。...它们使用后的效果是一样的,但是本质上是不同的。能解释一下为什么不同吗? 答案: static 修饰的属性或者修饰的函数都不可以重写。但是使用 class 修饰符,你可以重写属性或者函数。...---- 你能通过 extension (扩展)保存一个属性吗?请解释一下原因。 答案:不能。扩展可以给当前的类型添加新的行为,但是不能改变本身的类型或者本身的接口。

    6.9K30

    【面试必备】Swift 面试题及其答案

    注意:在运行时,结构体的在性能方面更优于类,原因是结构体的方法调用是静态绑定,而类的方法调用是动态实现的。这就是尽可能得使用结构体代替类的又一个好的原因。...1、泛型类 2、泛型结构体 3、泛型协议 答案: Swift 包含1和2特性。泛型可以在类、结构体、枚举、全局函数或者方法中使用。 3是通过typealias部分实现的。...问题4- Swift 1.0 or later 声明一个静态属性或者函数,我们常常使用值类型的static修饰符。...它们使用后的效果是一样的,但是本质上是不同的。能解释一下为什么不同吗? 答案: static修饰的属性或者修饰的函数都不可以重写。但是使用class修饰符,你可以重写属性或者函数。...1.0 or later 你能通过extension(扩展)保存一个属性吗?

    2.8K20

    Swift 周报 第三十八期

    类型化抛出就像类一样,是静态类型信息的重要载体。你所说的相当于说“不应允许类实例在弹性库中具有特定的类类型,而应始终为 AnyObject”。这显然是非常错误的。...我想知道是否可以将两者删除。 特别是,@Sendable 属性意味着传递给闭包的类型必须是 Sendable,这施加了相当严格的限制。因此,如果我们可以省略它,那就方便多了。...确实,理论上由于 eventLoop 类型被抽象为任何 EventLoop,实现一种将传递给 completeWithTask 的闭包存储到全局变量或类似的东西中的方法是可能的,但这对于 EventLoop...这个默认实现会让你遇到你提到的确切问题,但是如果你在 TCP 客户端类之外声明通道、处理程序、事件循环等,你可以处理处理程序类中发生的更改,例如断开连接或接收消息, 在客户端类的其他方法中。...:一个基于 UIViewController,另一个基于 UITableViewController。

    23430

    新广告引发不满,苹果也染上了“大厂病” | Swift 周报 issue 53

    FranzBusch 建议使用 AsyncStream 的 makeStream(of:) 工厂方法,把继续传递给一个产生元素的子任务,把流传递给另一个消费事件的子任务。...Bash 表示认为把 Task 的初始化方法设置为 @discardableResult 可能是一个错误。Shier 问如果强制用户使用 _ = Task {} 来获得异步上下文会有帮助吗?...与普通 keypath 表达式类似,metatype keypath 表达式可以动态访问属性,但它们还可以直接引用静态属性。...在讨论过去的投稿中曾经讨论过允许 key path 表达式直接引用静态属性,并且与 @dynamicMemberLookup 和静态属性通过另一个计算属性引用的诸多繁琐方案。...提案的具体方案投稿建议允许 keypath 表达式定义静态属性的引用,以改善语言语义。这样做可以允许 keypath 表达式直接引用静态属性,而不需要使用技巧或绕过。

    24332

    【读书笔记】The Swift Programming Language (Swift 4.0.3)

    Enumerations * 递归定义的枚举,就是一个演示函数式编程的绝佳示例. * swift 中的枚举,变成了一中,可以有效承载数据和算法的描述性数据结构. * swift 中的 enumeration...Properties * lazy 关键字实现的属性懒加载,果然比重写 getter 方法,要清晰简洁好多啊. * 可以用 static 或 class 声明类变量/类方法; 用class 声明的类变量或类方法...* 可以通过 super 来使用父类方法或属性. * 可以在方法或属性前加 final 关键字,来禁止被子类重写. * 可以在类前加 final 关键字,来禁止被继承....;deisingnated init 中,是不允许调用同级的另一个deisingnated init;子类中,只允许调用父类的 designated init. * 调用父类初始化方法前,子类自有的 stored...* 类型方法调用,不允许使用自身作为 inout 参数传递给自己的某个方法.

    1.5K100

    Swift vs. Kotlin 漫谈系列之类与继承

    在 JVM 平台,如果使用 @JvmStatic 注解,你可以将伴生对象的成员生成为真正的静态方法和字段。 不过你们的类方法还可以被子类重写,这个在 Java 里也不行。...Swift 里面如果不想让一个类能被继承,可以在声明类时加上 final 关键字。另外如果两个类分辨属于不同的模块,基类必须用 open 关键字修饰才能被另一个模块的类继承。...,Kotlin 里面还新增了嵌套类的概念,就是可以直接在类体里面另外一个类,其实就是之前 Java 里面的静态内部类。...这是因为 var 本质上是多声明了一个 setter 方法。 此外,我们还可以在类的主构造函数的参数也可以同样实现属性覆盖。...在 JVM 平台,如果使用 @JvmStatic 注解,你可以将伴生对象的成员生成为真正的 静态方法和字段。更详细信息请参见Java 互操作性一节。

    3.7K40

    打造完备的iOS组件化方案:如何面向接口进行模块解耦?

    我在这里给出8个理想情况下的指标: 1) 模块间没有直接耦合,一个模块内部的修改不会影响到另一个模块 2) 模块可以被单独编译 3) 模块间能够清晰地进行数据传递 4) 模块可以随时被另一个提供了相同功能的模块替换...实现思路是将 protocol 和对应的类进行字典匹配,之后就可以用 protocol 获取 class,再动态创建实例。...可选依赖:属性注入和方法注入 当依赖是可选的,并不是创建对象所必需的,可以用属性注入和方法注入。 属性注入是指外部设置对象的属性。方法注入是指外部调用对象的方法,从而传入依赖。...另一个方式是使用适配器模式,可以让不同模块使用各自不同的 protocol 和同一个模块交互。...对于 UIKit 中的那些复杂的 UI 类,或者 Swift 类,可以用子类,然后在子类中重写方法,进行模块适配。

    7.8K43

    Swift 面试题

    中 rebase和 merge 的区别,rebased的 commitID 会改变吗 SwiftUI 中 View 传值方式有哪些 什么情况下触发 layoutSubviews 答案 Swift 中...Struct 和 Class 的区别 Struct是值类型,Class 是引用类型; Struct和 Class 都可以有属性和方法,但是 let 修饰的 Struct 不能更改,Class 修饰的可以更改...;Struct方法中修改属性需要在方法前添加 mutating 关键字。...Swift 中变量作用域有哪些,区别是什么 open > public > internal > fileprivate > private open 和 public 都可以访问模块外的属性或方法,...MVP 的优点是: 模型与视图分离,从而改变视图的时候不会影响模型 可以更高效的使用模型,所有的交互都发生在 Presenter 内部 可以将一个 Presenter用于多个视图,不需要改变 Presenter

    9110

    AVKit框架详细解析(四) —— 基于AVKit 和 AVFoundation框架的视频流App的构建

    可以肯定,这是一份令人印象深刻的成就清单,但是…… 你能做这个吗? 没错,是时候让您的应用更上一层楼并学习如何添加视频流了! 您将为所有这些旅行视频博主构建一个新应用程序。...转到 Video.swift。 在这里您可以看到 fetchRemoteVideos()只是加载另一个 JSON 文件。...您需要熟悉的主要类是: 1) AVPlayerLayer:这个特殊的 CALayer 子类可以显示给定 AVPlayer 对象的播放。 2) AVAsset:这些是媒体资产的静态表示。...rate = value } 顾名思义,您可以使用这些方法来控制视频音量和播放速率。 您还可以将 0.0 传递给 setRate(_:) 以暂停视频。...确保使用您已经实现的方法将绑定值传递给底层 UIView: func makeUIView(context: Context) -> LoopingPlayerUIView { let view

    7K10

    【Dev Club分享】JSPatch成长之路

    如果是,就把类名和传进来的方法名传到 OC 层进行调用,如果不是,就调用回 JS 这个对象的方法。...这样做简洁高效地解决了前面的问题,不需要去 OC 遍历每个类的方法,不需要存储这些方法,就可以调用任意 OC 方法,只需要给 JS 基类定义一个 __c 方法就可以了。...Swift 相关问题在 wiki 里有提到: 只支持调用继承自 NSObject 的 Swift 类 继承自 NSObject 的 Swift 类,其继承自父类的方法和属性可以在 JS 调用,其他自定义方法和属性同样需要加...若方法的参数/属性类型为 Swift 特有(如 Character / Tuple),则此方法和属性无法通过 JS 调用。 Swift 项目在 JSPatch 新增类与 OC 无异,可以正常使用。...审核只是一个环节,测试/打包/发布/用户下载,这些其他环节还是不可少,并且最大的问题还是是用户下载更新不可控。 Q6: Swift 属于静态编译类型,是不是可以利用类似 c函数替换的方法呢?

    1.6K40

    市值一夜蒸发8000亿元 | Swift 周报 issue 50

    旧版本编译器将支持,但对比操作符(比如 Equatable或 Hashable)对于引用静态属性的键路的正确性将无法保证。未来方向该提议提到,未来可能会提出支持只读键路对枚举案例的支持。...此外,对话还涉及将全局参与者隔离类型的实例传递给泛型函数及其对子类化模式的影响。有人反对改变限制这种使用的规则,以支持更多的子类化模式。...目前已经在一个小服务中使用过 Hummingbird,并且已经很好地工作了。另一个明显的候选人是另一个小服务。简单而强大的框架,已经在我们的小服务中使用了版本 2,迄今为止没有任何问题。...另一个开发者叫做 Jon Shier 建议苹果可以添加类型或者标记来禁用并发检查这些值。...此外,还介绍了如何拼接不同样式的文本,并提供了一个整合常用文本属性的类,使得使用 AttributedString 更加便捷。通过这些方法,可以轻松实现丰富的文本样式效果。

    16332

    Swift学习总结

    11、结构体和类都支持类方法(c++的静态方法),但是结构体需要在方法前用static标记,而类则用class标记该方法。...类计算属性与类方法很类似,区别是一个用关键字var,另一个用func,类计算属性没有圆括号。 计算属性如果没有写入方法,可以省略定义中的get。 子类要重载类计算属性,同样要标记override。...private:访问级别所修饰的属性或者方法只能在当前类里访问.(注意:Swift4 中,extension 里也可以访问 private 的属性。)...感叹号表示返回隐式展开可空类型实例,其使用起来方便(不需要写可空类型展开的语法),但不如跟随问号安全。 19、在被赋给另一个实例或是作为参数传递给函数时,值类型总是被复制。...6、swift新特性,除了枚举、结构、类支持extension扩展,协议也可以进行扩展,可以添加有实现的计算属性和方法,只是不能添加存储属性。

    3K20

    Swift性能优化分析

    静态派发(static dispatch):是在编译期就能确定的调用方法的派发方式。...我们在swift文档里面能看到对结构的描述,结构体是值类型(Value Type),当值类型的数据赋值给一个变量或常量,或者传递给一个函数时,是值拷贝; 例如: struct Resolution {...,当hd赋值给cinema时,是将hd中存储的值拷贝给cinema,所以当给cinema的width属性赋值的时候,并不会改变hd中的属性值,如下图所示: image.png 结构体除了属性的存储更安全...对于类(class)来说,每个类都会创建一个虚拟函数表指针,这个指针则指向一个v-table表,也就是虚函数表,表内存储着该类的函数指针数组,拥有继承关系的子类会在虚函数表内通过继承顺序(C++可以实现多继承...包含retain/release优化,动态方法的去虚拟化,闭包内联,内存初始化提升和泛型方法实例 化. 可用于分配"脆弱"内联的稳定分配格式,将Swift库组件的泛型优化为二进制。

    1.4K30

    100个最常问的JavaScript面试问答-第3部分(共10部分)

    问题28.可以将匿名函数分配给变量并将其作为参数传递给另一个函数吗? 问题29.什么是arguments object(参数对象)? 问题30.可以将参数对象转换为数组吗?...答: 作为Array.prototype.filter方法的MDN描述,该filter()方法将创建一个新数组,其中包含所有通过通过所提供函数实现的测试的元素。...可以使用function关键字将其定义为: function named() { // write code here } 问题28.可以将匿名函数分配给变量并将其作为参数传递给另一个函数吗?...可以将匿名函数分配给变量。 也可以将其作为参数传递给另一个函数。...这是一个类似Array的对象,因为它具有length属性,我们可以使用数组索引符号参数[1]访问各个值 但它在数组中没有内置方法来进行每个,化简,过滤和映射。 它有助于我们了解函数中传递的参数数量。

    1.6K40

    Swift入门:类

    您可以将一个类定义为基于另一个类,添加任何您想要的新内容。 当你创建一个类的实例时,它被称为一个对象。如果复制该对象,默认情况下,两个副本都指向同一个数据——更改一个,副本也会更改。...如果你愿意的话,你可以给他们取唯一的名字——这取决于你自己。 重要提示:Swift要求所有非可选属性在初始化方法结束时或在初始化方法内调用任何其他方法时(以先到者为准)都有一个值。...相反,Swift有一个更聪明的解决方案:我们可以将CountrySinger定义为基于Singer,它将获得其所有属性和方法,以便我们建立: class CountrySinger: Singer {...} } 注意它的初始值设定项是如何接受三个参数,然后调用super.init()将name和age传递给Singer超类的——但只有在设置了它自己的属性之后。...和Objective-C混合使用 如果你想让苹果操作系统的某个部分调用Swift类的方法,你需要用一个特殊的属性来标记它:@objc。

    75410

    iOS-Swift 方法

    在结构体和类内部的方法中,引用当前实例的属性时,一般情况下可以不用在属性前加 self 关键字,比如 self.age 可以直接将 self. 省略,写成 age。...二、结构体的方法 接下来有一个 SHPoint 结构体,分别有 x,y 属性。...需要注意的是,结构体的类方法调用也和实例方法的调用一样,都是直接拿函数的地址调用。在 Swift 中声明一个类方法需要在 func 前家加上 static 关键字。...Swift 是一门静态语言,许多东西在运行的时候就可以确定了,所以才可以直接拿到函数的地址进行调用,这个调用的形式也可以称作静态派发。...三、类的方法 我们已经了解了 Swift 结构体的方法调用,那么 Swift 的类呢?和结构体一样吗,但不管和结构体一不一样,肯定是和 OC 的类不一样的。 1.

    3.1K40
    领券