Swift基础知识 - 草稿

swift快速入门:https://www.yiibai.com/swift/swift_quick_guide.html

JSON校验格式化工具:https://www.bejson.com/

oc转Swift:https://swiftify.com/converter/code/



1.Swift和Objective-C有什么区别

(1)Swift是静态语言,有类型推断;Objective-C是动态语言

(2)Swift支持多编程范式,既支持面向对象编程,也支持面向协议编程,同时还支持函数式编程;Objective-C面向对象编程

(3)Swift注重值类型;Objective-C注重引用类型

(4)Swift支持泛型;Objective-C只支持轻量泛型(给集合添加泛型)

(5)Swift支持静态派发(效率高)、动态派发(函数表派发、消息派发)方式;Objective-C支持动态派发(消息派发)方式

(6)Swift支持函数式编程(高阶函数)

(7)Swift的协议不仅可以被类实现,也可以被Struct和Enum实现

(8)Swift有元组类型、支持运算符重载

(9)Swift支持命名空间

(10)Swift支持默认参数,即:


(11)Swift比Objective-C代码更简洁

总结Swift比Objective-C的优势:

Swift容易阅读,语法和文件结构简易化;

Swift更易于维护,文件分离后结构更清晰;

Swift更加安全,它是类型安全的语言;

Swift的代码更少,简洁的语法可以省去大量代码;

Swift速度更快,运算性能更高。


2.讲讲Swift的派发机制

函数的派发机制:静态派发(直接派发)、函数表派发、消息派发。

Swift派发机制总结:

(1)Swift中所有ValueType(值类型:Struct、Enum)使用直接派发;

(2)Swift中协议的Extensions使用直接派发,初始声明函数使用函数表派发;

(3)Swift中Class中Extensions使用直接派发,初始声明函数使用函数表派发,dynamic修饰的函数使用消息派发;

(4)Swift中NSObject的子类用@nonobjc或final修饰的函数使用直接派发,初始声明函数使用函数表派发,dynamic修饰的Extensions使用消息派发。

Swift中函数派发查看方式:可将Swift代码转换为SIL(中间码)

swift -emit-silgen -0 example.swift


3.Swift如何显示指定派发方式

添加final关键字的函数使用直接派发;

添加static关键字函数使用直接派发;

添加dynamic关键字函数使用消息派发;

添加@objc关键字的函数使用消息派发;

添加@inline关键字的函数会告诉编译器可以使用直接派发。


4.Struct和Class的区别

(1)Struct不支持继承,Class支持继承;

(2)Struct是值类型,Class是引用类型;

(3)Struct使用let创建不可变,Class使用let创建可变;

(4)Struct无法修改自身属性值,函数需要添加mutating关键字;

(5)Struct不需要deinit房费,因为值类型不关系引用计数,Class需要deinit方法;

(6)Struct初始化方法是基于属性的。


5.Swift中的常量和Objective-C中的常量有什么区别

Objective-C中的常量(const)是编译期决定的,Swift中的常量(let)是运行时确定的。


6.?和??的区别

?用来声明可选值,如果变量未初始化则自动初始化nil;在操作可选值时,如果可选值是nil则不响应后续的操作;使用as?进行向下转型操作。

??用来判断左侧可选值非空时返回左侧可选值,左侧可选值为空(nil)则返回右侧的值。


7.Swift中mutating的作用

Swift中协议是可以被Struct和Enum实现的,mutating关键字是为了能在被修饰的函数中修改Struct和Enum的变量值,对Class完全透明。


8.Set(集合类型)的使用场景

集合(Set)用来存储相同类型并且没有确定顺序的值,当集合元素顺序不重要时或者希望确保每个元素只出现一次时可以使用集合而不是数组。Set存储值类型相同、无序、去重。


9.final关键词的用法

final关键词的作用:它修饰的类(Class)、方法(func)、变量(var)是不能被继承或重写的,编译器会报错。另外,通过它可以显示的指定函数的派发机制。


10.lazy关键词的用法

lazy关键词的作用:制定延时加载(懒加载),懒加载存储属性只会在首次使用时才会计算初始值属性。懒加载属性必须声明(var)为变量,因为常量属性初始化之前会有值。


11.Swift中的访问控制权限

Open:实体可被同一模块内所有实体访问,模块外可导入该模块即可访问,模块外可被继承和重写。

Public:实体可被同一模块内所有实体访问,模块外可导入该模块即可访问,模块外不能被继承和重写。

internal:实体可被同一模块内所有实体访问,模块外无法访问,大部分实体默认是internal级别。

fileprivate:限制实体只能在当前文件内访问到,不管是否在本类的作用域。

private:限制实体只能在本类的作用域且在当前文件内能访问。

关于嵌套类型:嵌套类型的访问级别和包含它的类型访问级别一致。但是public除外,在public修饰的类中定义嵌套类型默认为internal访问级别。


12.Any和AnyObject的区别

AnyObject只能表示引用类型的任何实例,相当于Objective-C中的id类型。

Any可以表示类、结构体、枚举的任何实例。

AnyObject是Any的子集。


13.Swift的Copy On Write机制是什么

1)Swift中参数传递是值类型传递,它会对值类型进行copy操作,当传递一个值类型变量时(变量赋值,函数传参),它传递的是一份新的copy值,两个变量指向不同的内存区域。如果频繁操作的变量占内存较大,会产生性能问题。

2)Copy On Write是一种优化值类型copy的机制,对String,Int,Float等非集合数据类型,赋值直接拷贝,对于Array等集合类型数据,只有传递的内容值改变后才进行拷贝操作。

3)Copy On Write的实现:set函数中判断是否存在多个引用,只有存在多个引用的情况下才会进行拷贝操作。另外自定义结构体是不支持Copy On Write的。


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容