[open/public]和[private/fileprivate]
public
1.使用public修饰的类,属性或方法,可以被任何类访问
2.但在其他的module中不可以被override和继承,而在本module可以
module内和module外的区别 : module内是指不需要使用import引用文件,就可以创建对象,表示module内,而module外是指需要使用import文件才能创建对象才能使用
这里有个很好的module例子,比如说你项目中用到了pods,你要继承里面一个类,这时候public和open就起到作用,但是如果你在工程里面,通俗的说就是基本上和open没有区别
open
1.可以被任何人使用
2.也可以被override和继承,这是和public的区别
private
只在自己的类里面可以使用,在类外不能用,就是说,不管另外一个类是否在这个文件里,都不能访问,包括自己的extension里面
fileprivate
顾名思义,只要在这个文件里面,所有的类、extension都可以访问,比如说类A和B都在同一个swift文件里面,A里面初始化B,调用B里面属性方法都可以
String格式化
1,下面是一个浮点类型的数字转成String字符串的例子
|
|
2,如果要保留两位小数12var f = 123.32342342var s = String(format: "%.2f", f) //123.32
3,转成十六进制格式字符串12let i = 255let s:String = String(format: "%x", i) //ff
4,不足六位前面补012let i = 255let s:String = String(format: "%06x", i) //0000ff
Array和Dictionary
Array
- 遍历
|
|
Dictionary
- 遍历
|
|
Keyboard
|
|
protocol
总结一句话:只要协议里面声明的函数,优先调用实现,没有声明按类型区分调用
如果类型推断得到的是实际的类型
- 那么类型中的实现将被调⽤;如果类型中没有实现的话,那么协议扩展中的默认实现将 被使⽤
- 如果类型推断得到的是协议,⽽不是实际类型 并且⽅法在协议中进⾏了定义,
- 那么类型中的实现将被调⽤;如果类型中没有实现,那 么协议扩展中的默认实现被使⽤ 否则 (也就是⽅法没有在协议中定义),扩展中的默认实现将被调⽤