iOS 面试 Swift基础题
一、Swift 存储属性和计算属性比较:
存储型属性:用于存储一个常量或者变量
计算型属性: 计算性属性不直接存储值,而是用 get / set 来取值 和 赋值,可以操作其他属性的变化.
- 计算属性可以用于类、结构体和枚举,存储属性只能用于类和结构体。
- 存储属性可以是变量存储属性(用关键字 var 定义),也可以是常量存储属性(用关键字let定义),而计算属性只能用var定义
- 计算属性不直接存储值,而是提供一个 getter 和一个可选的setter,来间接获取和设置其他属性或变量的值
var age = 12var name = "小花"var kind = "法斗"//定义计算属性的getter方法,该方法的返回值由age、name、kind三个存储属性决定var petInfo:String{get {return "this is a pet which name is \(name),age is \(age), kind is \(kind)"}set (newInfo){}}
二、inout关键字有什么作用
需要用到inout 关键字,调用函数时加&
inout关键字本质是通过地址传递进行值修改的
三、OC和Swift中的protocol
OC和SwiftProtocol的共同点
本质都是抽取不同类的共同方法和属性(声明),供遵循协议的类或对象使用。
都可以通过定义协议实例deleagate,来实现委托代理模式。
PS:类比继承的概念,继承父类的方式比较险隘,子类和父类只能为同一基类,且方法都有实现,需在子类中override,并不能把方法和属性完全独立出来,且不能多继承。
OC和SwiftProtocol的区别(核心)
OC中的协议更单纯的受限于委托代理的含义,多用于跨类的传值和回调通知。
而Swift是面向协议编程,其思想是通过抽取不同类中的相同方法和属性,实现模块化减少耦合。
Swift可以通过协议extension扩展,缺省实现协议的方法(OC不行)。
Swift的协议不需要单独声明协议对象(id delegate)和指定代理(delegate = self),只需要遵循协议的类实现声明,或使用协议的缺省实现。
四、Swift 中的 enum 和 OC 中 有什么区别
OC
1.oc的枚举值相当于这个文件中的一个局部变量,只能是整型
2.不同枚举中,枚举名称不可以一样,在同一文件
Swift
3.枚举里可以写方法
4.枚举的rawValue可以是Float(float也是赋值的后面依次+1)或是String,或是没有
5.可以用Rank(rawValue: 3)方法创建一个枚举实例
6.枚举实例可以带参数
五、struct和class的区别
1)swift中所有值类型:struct、enum使用直接派发。
2)swift中协议的extensions(类似于OC的分类)使用直接派发,初始声明函数使用函数表派发
3)swift中class中extensions使用直接派发,初始化声明函数使用函数表派发,dynamic修饰的函数使用消息派发。
Swift中,mutating关键字指的是可变即可修改。用在structure和enumeration中,虽然结构体和枚举可以定义自己的方法,但是默认情况下,实例方法中是不可以修改值类型的属性。为了能够在实例方法中修改属性值,可以在方法定义前添加关键字mutating。
在 Swift 中,值类型,存放在栈区;引用类型,存放在堆区。Swift 中,典型的有 struct,enum,以及 tuple 都是值类型。
当值类型的变量作为参数被传入函数时,相当于创建了新的常量并初始化为传入的变量值,该参数的作用域及生命周期仅存在于函数体内。
当引用类型的变量作为参数被传入函数时,相当于创建了新的常量并初始化为传入的变量引用,当函数体内操作参数指向的数据,函数体外也受到了影响
6.当你的项目的代码是 Swift 和 Objective-C 混合开发时,你会发现在 Objective-C 的代码里无法调用 Swift 的 Struct。因为要在 Objective-C 里调用 Swift 代码的话,对象需要继承于 NSObject。
7.内存分配:struct分配在栈中,class分配在堆中。struct比class更“轻量级”(struct是跑车跑得快,class是SUV可以载更多的人和货物)
3.struct是值类型(Value Type),深拷贝。class是引用类型(Reference Type),浅拷贝。
六、Swift optional是什么类型的
optional类型是一个枚举类型,有两个枚举值:
1、None类型
2、Some(Wrapped)
这两个类型决定了optional类型的概念和含义,有值或者没有值:
1)optional.None表示该类型没有值,也就是nil。(特别声明,swift中的nil不在有指针含义,而是表示且仅表示optional的.None)。
2)optional.Some(Wrapped)这是表示有值的情况,Some类似于java或者c++的泛类型的含义,Wrapped 类似是封装的值。
optional的wrap和unwrap
使用optional类型,该类型会对赋值过程和取值进行一些处理。
1)赋值也被称为装包的过程(wrap),optional类型会获取当前值的类型和具体值,如int类型的数字100.当一个optional类型被赋值为这个值时,其实optional记录了对应的类型(some)int,和值部分(wrapped)100.
2)取值也被称为解包的过程(unwrap),optional根据记录的类型(some)如上面说的int,和值部分(wrapped)100,新建一个some(wrapped)同int(100)返回给程序
optional是swift特别声明的安全类型,在使用过程中如果处理得当的话可以防止以前oc上很多因为数据没值导致的crash。个人还是比较推荐使用的,虽然有时候有些解包的过程感觉特别麻烦,但这都是一道道安全门,阻断了很多crash的诞生。
七、rxswift中请求重试的方法是哪个?
1,catchError
enum ObError: Error {case error1
}let ob1 = PublishSubject<String>()
let ob2 = PublishSubject.of("A", "B")ob1.catchError { (error) -> Observable<String> inprint(error)return ob2
}.subscribe { event inprint(event)
}.disposed(by: disposeBag)
ob1.onNext("111")
ob1.onError(ObError.error1)
//next(111)
//error1
//next(A)
//next(B)
//completed
2,retry
var isFail = true
let obs = Observable<String>.create { (ob) -> Disposable inob.onNext("成功1")if isFail {ob.onError(ObError.error1)isFail = false}ob.onNext("重试成功")ob.onCompleted()return Disposables.create()
}obs.retry(2).subscribe { event inprint(event)
}.disposed(by: disposeBag)next(成功1)
next(成功1)
next(重试成功)
completed
八、讲解一下Swift中的数据封装
封装主要有两大目的:一是为了我们使用数据更加方便,二是为了数据保护。
1、Swift 访问修饰符
在 Swift 语言中,访问修饰符也分为三类,分别是 private、internal、public。
Swift 的访问修饰符从 Xcode6 beta4 才开始支持。
Swift 对访问权限的控制,不是基于类的,而是基于文件的。
在 Swift 语言中,若要设置某一属性的访问权限,需在定义属性时加上相应的修饰前缀。
三类修饰符的访问权限
1)private 所修饰的属性或者方法只能在当前 Swift 源文件里可以访问,在别的文件里访问会出错。
2)internal 是默认的访问权限。所修饰的属性或者方法在源代码所在的整个模块都可以访问。如果是框架或者是库代码,则在整个框架内部可以访问,框架由外部代码所引用时,则不可访问。如果是 App 代码,在整个 App 内部可以访问。
3)public 所修饰的属性或者方法对于引用了该文件或者模块的文件来讲,都能访问这些属性和方法。一般来说 public 的出现是为了 API 开发而设置。
Class Person {private var _weight: Int!var weight: Int {get {return _weight}set {_weight = newValue}}
}
您甚至可以将变量设为公开只读,并设为私有读写:
class Person {public private(set) var weight: Int
}
九、Swift异常捕捉的方法有哪些 ?
//
// ViewController.swift
// Throws
//
// Created by fe on 2017/3/7.
// Copyright © 2017年 fe. All rights reserved.
//import UIKitclass ViewController: UIViewController {override func viewDidLoad() {super.viewDidLoad()//如果在调用系统的方法时,后面有throws则说明此方法会抛出异常,如果方法会抛出异常,则需要我们处理异常//创建正则表达式规则let pattern = "abcdefg"//创建正则表达式队形/*在swift中提供三种处理异常的方式方式一:try方式 程序员手动捕捉异常do { let regex = try NSRegularExpression(pattern: pattern, options:.caseInsensitive)print(regex)}catch{print(error)}方式二:try?方式(常用方式) 系统帮助我们处理异常,如果有异常,则该方法返回nil,如果没有异常,则该方法返回对应的对象guard (try? NSRegularExpression(pattern: pattern, options: .caseInsensitive)) != nil else {return}方式三:try!方式(不建议使用,非常危险)这种方法直接告诉系统没有异常,如果有异常则程序会崩溃let regex = try! NSRegularExpression(pattern: pattern, options:.caseInsensitive)*/}}
函数中产生的异常只能在函数内部解决,开发者也可以使用throws关键字将此函数声明为可抛异常函数,此类声明则允许开发者在函数外解决函数内部抛出的异常
** 异常的捕获与处理
系统为我们提供了三种异常处理的方法:<1> 使用do-catch结构来捕获处理异常、将异常映射为optional值,终止异常传递<2> 使用try?来调用函数可以将异常映射为Optional值<3> 使用try!来强制终止异常的传递do-catch:do-catch结构是swift语言中处理异常最常用的方法,开发者需要将可能抛出的异常的代码放入do结构中,如果这部分代码中有抛出异常,则会从catch块中寻找对应的异常类型,如果找到对应的,则会执行此catch块中的异常处理代码.
十、map函数有几种、分别讲解一下?
高阶函数一共有下面几个:
map:对给定数组每一个元素,执行闭包中的映射,将映射结果放置在数组中返回。
flatMap:对给定数组的每一个元素,执行闭包中的映射,对映射结果进行合并操做,而后将合并操做后的结果放置在数组中返回。
compactMap:对给定数组的每一个元素,执行闭包中的映射,将非空的映射结果放置在数组中返回。
filter:对给定数组的每一个元素,执行闭包中的操做,将符合条件的元素放在数组中返回。
reduce:对给定数组的每一个元素,执行闭包中的操做对元素进行合并,并将合并结果返回。
相关文章:

iOS 面试 Swift基础题
一、Swift 存储属性和计算属性比较: 存储型属性:用于存储一个常量或者变量 计算型属性: 计算性属性不直接存储值,而是用 get / set 来取值 和 赋值,可以操作其他属性的变化. 计算属性可以用于类、结构体和枚举,存储属性只能用于类和结构体。存储属性可…...

(七)for循环控制
文章目录 用法while的用法for的用法两者之间的联系可以相互等价用for改写while示例for和while的死循环怎么写for循环见怪不怪表达式1省略第一.三个表达式省略(for 改 while)全省略即死循环(上面已介绍) 用法 类比学习while语句 …...

ASP .NET Core Api 使用过滤器
过滤器说明 过滤器与中间件很相似,过滤器(Filters)可在管道(pipeline)特定阶段(particular stage)前后执行操作。可以将过滤器视为拦截器(interceptors)。 过滤器级别范围…...

CodeGPT--(Visual )
GitCode - 开发者的代码家园 gitcode.com/ inscode.csdn.net/liujiaping/java_1706242128563/edit?openFileMain.java&editTypelite marketplace.visualstudio.com/items?itemNameCSDN.csdn-codegpt&spm1018.2226.3001.9836&extra%5Butm_source%5Dvip_chatgpt_c…...

1.Mybatis入门
目录 前言 1入门 1.1 入门程序实现 1.2 数据准备 编辑 1.3 配置Mybatis 1.4 编写SQL语句 1.5 单元测试 1.6 解决SQL警告与提示 2. JDBC介绍(了解) 2.1 介绍 2.2 代码 2.3 问题分析 2.4 技术对比 3. 数据库连接池 3.1 介绍 3.2 产品 4. lombok 4.1 介绍 4.…...

android camera系列(Camera1、Camera2、CameraX)的使用以及输出的图像格式
一、Camera 1.1、结合SurfaceView实现预览 1.1.1、布局 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-au…...
live555搭建流式rtsp服务器
源代码已上传gitee 一、需求 live555源代码中的liveMediaServer是将本地文件作为源文件搭建rtsp服务器,我想用live555封装一个第三方库,接收流数据搭建Rtsp服务器;预想接口如下: class LiveRtspServer { public:/***brief构造一…...
Apache孵化器领路人与导师的职责
对于捐赠到 ASF 孵化器的项目来说, ASF 孵化器项目管理委员会(IPMC)的成员会扮演两个角色,一个 孵化器领路人(Champion),另外一个是孵化器导师(Mentor)。 本文源自 ALC …...

【C++中STL】set/multiset容器
set/multiset容器 Set基本概念set构造和赋值set的大小和交换set的插入和删除set查找和统计 set和multiset的区别pair对组两种创建方式 set容器排序 Set基本概念 所有元素都会在插入时自动被排序。 set/multist容器属于关联式容器,底层结构属于二叉树。 set不允许容…...

使用 create-react-app 创建 react 应用
一、创建项目并启动 第一步:全局安装:npm install -g create-react-app 第二步:切换到想创建项目的目录,使用命令create-react-app hello-react 第三步:进入项目目录,cd hello-react 第四步:启…...
obs-studio 源码学习 obs.h
obs.h 引用头文件介绍 c99defs.h:这个头文件提供了一些 C99 标准的定义和声明,包括一些常用的宏定义和类型定义,用于提高代码的可移植性和兼容性。 bmem.h:这个头文件提供了对内存分配和管理的功能,包括一些内存分配…...

C语言-指针的基本知识(上)
一、关于内存 存储器:存储数据器件 外存 外存又叫外部存储器,长期存放数据,掉电不丢失数据 常见的外存设备:硬盘、flash、rom、u盘、光盘、磁带 内存 内存又叫内部存储器,暂时存放数据,掉电数据…...

4核16G幻兽帕鲁服务器优惠价格表,阿里云和腾讯云报价
幻兽帕鲁服务器价格多少钱?4核16G服务器Palworld官方推荐配置,阿里云4核16G服务器32元1个月、96元3个月,腾讯云幻兽帕鲁服务器服务器4核16G14M带宽66元一个月、277元3个月,8核32G22M配置115元1个月、345元3个月,16核64…...

GitHub 上传文件夹到远程仓库、再次上传修改文件、如何使用lfs上传大文件、github报错一些问题
按照大家的做法,把自己遇到的问题及解决方案写出来(注意:Error里面有些方法有时候我用可以成功,有时候我用也不能成功,写出来仅供参考,实在不行重头再clone,add,commit,p…...

一些es的基本操作
目录 给索引增加字段:给索引删除字段[^1]:创建索引:插入document删除document(应该是按ID) : 给索引增加字段: 用postMan: 给名为population_portrait_hash_seven的索引增加了一个text类型的字段。 用chrome插件Elasticvue 的Re…...

酒鬼酒2024年展望:稳发展动能,迈入恢复性增长轨道
文 | 琥珀酒研社 作者 | 渡过 最近几个月来,白酒估值回落到近十年来低位,反映出了整个白酒行业的市场低迷和虚弱现状。不管是头部企业五粮液、泸州老窖,还是区域酒企口子窖、金种子酒等,最近都通过“回购”或“增持”࿰…...

1002. HarmonyOS 开发问题:鸿蒙 OS 技术特性是什么?
1002. HarmonyOS 开发问题:鸿蒙 OS 技术特性是什么? 硬件互助,资源共享 分布式软总线 分布式软总线是多种终端设备的统一基座,为设备之间的互联互通提供了统一的分布式通信能力,能够快速发现并连接设备,高效地分发…...
vue-cli 无法安装问题解决
在macOS上安装vue-cli,但一直都失败,最后终于解决。 先后报错了2个问题。 报错无法安装 其实原因是源被切断,默认的源是官方的,但在CN是无法正常访问,各种问题。直接将源修改才可以。但可能需要试多次。 npm config…...

spring-bus消息总线的使用
文章目录 依赖bus应用接口用到的封装参数类 接收的应用监听器定义的事件类 使用bus定义bus远程调用A应用数据更新后通过bus数据同步给B应用 依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-amqp…...

isctf---re
crackme 解压得到crackme.exe 运行得到flag babyRe 先猜e65537的rsa 先用Z3强行求出p、q,算出常规rsa中的phi,然后套用公式求出m exp #babyre wp from z3 import * import libnum from Crypto.Util.number import * p,q,cInts(p q c) S Solver() S…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...

C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...