swift相关知识点杂锦

Swift知识点总结

 

 1、private 表示代码只能在当前作用域或者同一文件中同一类型的作用域中被使用,而fileprivate 表示代码可以在当前文件中被访问,而不做类型限定。

 

2、Swift的可选类型(optional),用于处理值缺失的情况,可选表示"那儿有一个值,并且它等于 x "或者"那儿没有值”。你可以解析可选类型访问这个值,或者根本没有值。可以给变量赋值为nil来表示它没有值,

 

注意:nil不能用于非可选的常量和变量,如果代码中有常量或者变量需要处理值缺失的情况,请声明为对应的可选类型。

 

单感叹号 !称为可选值的强制解析,双问号 ?? 表示应对值缺失的时候的处理,比如设置为默认值

 

3、MVC模式代表Model-View-Controller(模型-视图-控制器)。该模式用于应用程序的分层开发,提高代码重用率的设计哲学。

  A 、Model代表一个存取数据对象的地方,或直接表示原始数据,它可以带有逻辑,在数据变化时更新控制器

  B、View视图代表模型包含的数据的可视化

C、Controller控制器作用在模型和视图上,包含了将模型和其对应视图连接起来的逻辑,保持前二者的状态同步。控制数据流向模型对象,并在数据变化时更新视图,它使视图与模型分开。

 

4、Cocoa时苹果公司为Mac OSX所创建的原生面向对象的API,是Mac OS X上五大API之一(其他四个是Carbon、POSIX、X11和Java),特点:管理动态分配的内存,Cocoa中绝大部分类的基类都是NSObject,它实现了引用计数的内存管理模型),提供强大的基础对象。

 

5、CocoaPods是IOS开发,MaxOS开发中的包依赖管理工具,源码是ruby写的(如果没有包依赖工具,需要手动管理第三方包,需要拷贝第三方源码及其依赖,当第三方存在更新时,需要将更新过的代码拷贝到项目中)

 

6、(void)makeKeyWindow让当前UIWindow变成keyWindow(主窗口),(void)让当前的UIWindow变成keyWindow,并显示出来

 

7、在swift中,结构体的赋值操作是传值,而类的赋值操作是传递引用,原则上共享一块内存空间

 

8、使用extension来为现有的类型添加功能,比如新的方法和计算属性,开发者可以使用扩展在某个已在别处声明的类型来遵守某个协议,这同样适用于从外部库或者框架引入的类型,亦即拥有不需要访问被扩展类型源代码就能完成扩展的能力(即逆向建模)。

 

A、添加计算行实例属性和计算型类属性

B、定义实例方法和类方法

C、提供新的构造器

D、定义下标

E、定义和使用新的嵌套类型

F、使已经存在的类型遵循(conform)一个协议

 

9、协议定义了一个蓝图,规定了用来实现某一特定任务或者功能的方法、属性,以及其他需要的东西。类、结构体或枚举都可以遵守协议,并为协议定义的这些要求提供具体实现。某个类型能够满足某个协议的要求,就可以说该类型遵守这个协议。与类不同的是,协议仅仅只是定义函数和属性而不实现它们,而其他类则遵从这协议指定的规则,提供一个实际的实现,任何满足协议规则的类称之为遵守协议。协议的强大之处在于它们可以不提供实现的情况下形式化代码不同部分之间的连接,这样便可以在代码种构建刚性结构,而不必紧耦合代码组件(就是利用协议可以将一系列遵从协议的统一管理,可随时在代码中增加遵从协议的符合我们实现功能的类)。因为协议本身就属于类型,因此我们可以在很多地方用上:

A、作为一个函数返回的参数类型

B、作为一个常量、变量或者属性的类型

C、作为数组、字典或者其他容器的元素的类型

 

 

 

10、AnyObject 可以代表任何 class 类型的实例, Any 可以表示任意类型,甚至包括方法 (func) 类型

 

11、常见的带@的swift 属性wrapper

 

@discardableResult是Swift用来消除『未用结果』的warning,一般在使用到函数(方法)返回值的时候,会出现warning,例如

func sum(a: Int, b: Int) -> Int {

    return a + b

}

sum(a: 1, b: 2) // Result of call to 'sum(a:b:)' is unused

当在函数前面添加了@discardableResult关键词之后,便可以消除这个warning

 

@available放在函数(方法),类或者协议面前,表明这些类型使用的平台和操作系统,例如@available(ios 9,*)必须包含至少2个特性参数,其中ios 9表示必须在ios 9版本以上才可用,如果部署的ios平台低于9,那么会出现报错。*号表示包含所有的平台(全平台),包括iOS、OS X、watchOS、tvOS。

 

@objc,用来修饰未嵌套的类,协议,非泛型枚举,属性和方法等,修饰后的类型可以直接供Objective-C调用,简单理解,是因为很多框架都是用objective-C写的,因此一些需要与objective-C特征代码交互的Swift API需要用这个关键词来进行交互。

 

@objcMmebers @objc的升级版,当我们声明一个方法与Objective-C有交互时,可以使用@objc,当对一个类中的所有方法都与Objective-C有交互时,使用@objcMembers来在类名前进行声明。

 

@escaping,使用在闭包当中,当一个闭包作为参数传到一个函数中,但是这个闭包在函数返回之后才被执行,我们称闭包从函数中逃逸,而逃逸闭包意味着需要显式地引用self,如果是一个非逃逸闭包,意味着可以隐式引用self。

 

@State表明可变的UI状态,State是一个或多个随时间变化的值,这样子会影响一个视图的表现内容以及布局,使用@State修饰过的属性将存储到一个特殊的内存区域,并且这个内存区域和视图结构相隔离,当@State修饰过的属性发生了变化,SwiftUI会根据新的属性重新创建视图。

 

@Binding,有时候想传递一个视图的属性给子视图,但是又不能直接传递,因为在swift中是值传递,通过@Binding修饰过的属性变成了引用类型,表明这个值来自其他地方,但是会与另外一个地方的属性共同share

 

12、willset和didset是swift语言的属性观察方法,利用属性观察我们可以在当前类型内监视对于属性的设定,并做出一些响应,作为设置值的验证。

 

13、delegate模式在苹果开发平台上非常突出,它经常用来处理各种事情,例如使用UITableViewDelegate来处理表格视图时间,使用NSCacheDelegate修改缓存行为,delegate的核心思想就是允许一个对象以解耦的方式与其owner进行通信,而不用要求这个对象知道其owner 的确切类型,从而让代码更容易重用跟维护。

 

Delegation是一种设计模式,使一个类可以将某些职责移交或者委托给另外一个类的实例(委托另外一个类来完成一些自己的工作)

IOS的一些常用的使用delegate的类有:

A、UITableView类使用UITableViewDelegate和UITableViewDataSource来管理表格视图交互,展示单元格,以及改变表格视图布局

B、CLLocationManager使用CLLocationManagerDelegate来报告app中的定位相关的数据,例如iPhone的gps坐标

C、UITextView使用UITextViewDelegate来报告text视图的事件,例如插入符号,选择的改变,以及什么时候编辑停止。

 

14、strong:当你声明一个属性时,它默认就是强引用

Weak:弱引用对象的引用计数不会+1,必须为可选类型,且必须用var关键字,不能用let,因为弱引用变量在没有强引用的条件下会变成nil,而let常量在运行的时候不能被改变

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值