Swift学习笔记

1、加法运算符也用于String的拼接:“hello,” + “world” // 等于 “hello, world”

2、浮点数求余计算:不同于 C 语言和 Objective-C,Swift 中是可以对浮点数进行求余的。例如: 8 % 2.5 // 等于 0.5

3、检查类型:用类型检查操作符(is)来检查一个实例是否属于特定子类型。类型检查操作符返回 true 若实例属于那个子类型,若不属于返回 false 。

4、dynamic 将属性或者方法标记为dynamic就是告诉编译器把它当作oc里的属性或方法来使用(runtime),

5、swift中使用kvo的条件: 1.必须继承自NSObject 2. 被观察的属性 要被标记为 dynamic

6、swift中只要不是在多线程中, 建议使用[unowned self]来避免循环引用, 多线程中, 建议使用[weak self]

7、继承自NSObject的子类如果重写了isEquals:方法, 应当提供 hash 这个属性

8、swift中的属性默认是strong类型, 只有可选类型才能被标记为weak

9、swift中直接使用 is 来实现oc中isKindOfClass: 的功能

10、对于可能不被赋值的变量,应该声明为可选类型,而在正式使用该变量的时候,需要确定其已经被赋值。“!”的意思就是确定已经被赋值或者确定已经有值。

11、// (5) 类型推断 : 如果没有显式的指定类型,swift会使用推断类型(type inference)来选择适合的类型
let ddInt = 42 // ddInt 会被推断为 Int 类型
let pi = 3.14159 // pi 会被推断为double类型, 浮点数的类型会推断为double, 不是float
let pipi = 3 + 0.14159; // 表达式中同时出现整形和浮点数, 会被推断为double类型
print(ddInt,pi,pipi)

12、 数值范围及大小
/**
类型 大小(字节) 区间值
Int8 1字节 -127 ~ 127
UInt8 1字节 0 ~ 255
Int32 4字节 -2^31 ~ 2^31
UInt32 4字节 0 ~ 2^32
Int64 8字节 -9223372036854775808 ~ 9223372036854775807
UInt64 8字节 0 ~ 18446744073709551615
Float 4字节 1.2E-38 ~ 3.4E+38 (~6 digits)
Double 8字节 2.3E-308 ~ 1.7E+308 (~15 digits)
*/
Int : 长度与当前平台的原生字长相同, 在32(64)位平台上,Int和Int32(Int64)长度相同,在32位平台上,Int可以存储的整数范围 -2,147,438,648~2,147,483,647

13、强制解析 : 当你确定可选类型确实包含值之后,你可以在可选的名字后面加一个感叹号(!)来获取值。这个感叹号表示”我知道这个可选有值,请使用它。”这被称为可选值的强制解析(forced unwrapping)

14、自动解析 : 你可以在声明可选变量时使用感叹号(!)替换问号(?)。这样可选变量在使用时就不需要再加一个感叹号(!)来获取值,它会自动解析

15、可选绑定 : 使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用在if和while语句中来对可选类型的值进行判断并把值赋给一个常量或者变量。
var cccccString:String?
cccccString = “kexuanbangding….”
if let CCCCString = cccccString {
print(CCCCString)
} else {
print(“字符串没有值”);
}

16、可以使用字符串属性 isEmpty 来判断字符串是否为空

17、Int(String) : 转换字符串数字为整型

18、String.characters.count : 计算字符串的长度(或String.length)

19、 + : 连接两个字符串,并返回一个新的字符串
+= : 连接操作符两边的字符串并将新字符串赋值给左边的操作符变量
== : 判断两个字符串是否相等
< : 比较两个字符串,对两个字符串的字母逐一比较
!= : 比较两个字符串是否不相等

20、创建数组: var someArray = SomeType

21、修改数组 : 可以使用 append() 方法或者赋值运算符 += 在数组末尾添加元素

22、合并数组 : 使用加法操作符(+)来合并两种已存在的相同类型数组

23、isEmpty属性也可以判断数组是否为空

24、创建字典 : var someDict = KeyType: ValueType 创建一个特定类型的空字典

25、修改字典 : 使用 updateValue(forKey:) 增加或更新字典的内容。如果 key 不存在,则添加值,如果存在则修改 key 对应的值

26、isEmpty属性同样可以判断字典是否为空

27、元组作为函数返回值 : 元组与数组类似,不同的是,元组中的元素可以是任意类型,使用的是圆括号, 你可以用元组(tuple)类型让多个值作为一个复合值从函数中返回

28、可选元组类型 如(Int, Int)?与元组包含可选类型如(Int?, Int?)是不同的.可选的元组类型,整个元组是可选的,而不只是元组中的每个元素值。

29、可变参数 : 可变参数可以接受零个或多个值。函数调用时,你可以用可变参数来指定函数参数,其数量是不确定的
// 可变参数通过在变量类型名后面加入(…)的方式来定义
func readNickName(yourNicknam: String…) {
print(yourNicknam)
}
readNickName(“你的昵称 “, “Phoebe”, “nickname”) // 输出 : [“你的昵称 “, “Phoebe”, “nickname”]

30、inout 关键字 : In-Out Parameters 输入输出参数,如果你想要一个函数可以修改参数的值,且想要在这些修改在函数调用结束后仍然存在,则定义为输入输出参数
var inoutA = 10
var inoutB = 20
func inoutAB( a:inout Int, b:inout Int) {
a *= 2
b *= 2
let c = a + b
print(“a*2 + b*2 = (c)”)
}
print(“原始值:”,inoutA, inoutB)
inoutAB(&inoutA, b: &inoutB)
print(“改变后:”, inoutA, inoutB)

31、使用函数类型 : 你可以定义一个类型为函数的常量或变量,并将适当的函数赋值给它
/**
var addition: (Int, Int) -> Int = sum
解析 : 定义一个叫addition的变量,参数与返回的类型均为Int, 并让这个新变量指向sum函数。
sum 和 addition 有同样的类型,所以以上操作是合法的
*/
func sum(a: Int, b: Int) -> Int {
return a+b
}
let addAABB:(Int, Int) -> Int = sum
print(addAABB(10,20))

32、 恒等运算符 :
// 因为类是引用类型,有可能有多个常量和变量在后台同时引用某一个类实例。
/** 为了能够判定两个常量或者变量是否引用同一个类实例,Swift 内建了两个恒等运算符:
恒等运算符 : ===
不恒等运算符: !==
如果两个常量或者变量引用同一个类实例则返回 true 如果两个常量或者变量引用不同一个类实例则返回 true
*/

33、Swift 中类型转换使用 is 和 as 操作符实现,is 用于检测值的类型,as 用于转换类型。

34、在方法的func关键字之前加上关键字static或者class都可以用于指定类方法。不同的是用class关键字指定的类方法可以被子类重写, 但是用static关键字指定的类方法是不能被子类重写的

35、 重写属性 : 你可以提供定制的 getter(或 setter)来重写任意继承来的属性,无论继承来的属性是存储型的还是计算型的属性。
/** 注意
如果你在重写属性中提供了 setter,那么你也一定要提供 getter。
如果你不想在重写版本中的 getter 里修改继承来的属性值,你可以直接通过super.someProperty来返回继承来的值,其中someProperty是你要重写的属性的名字。
*/

36、重写属性观察器 : 你可以在属性重写中为一个继承来的属性添加属性观察器。这样一来,当继承来的属性值发生改变时,你就会监测到。
// 注意:你不可以为继承来的常量存储型属性或继承来的只读计算型属性添加属性观察器。

37、防止重写 : final, 我们可以使用 final 关键字防止它们被重写
// 如果你重写了final方法,属性或下标脚本,在编译时会报错。
// 你可以通过在关键字class前添加final特性(final class)来将整个类标记为 final 的,这样的类是不可被继承的,否则会报编译错误。

38、构造器 init()没有外部参数名称 : 如果你不希望为构造器的某个参数提供外部名字,你可以使用下划线_来显示描述它的外部名
struct ColorNO {
let red: Double
init(_ white: Double) {
red = white
}
}
let noColorA = ColorNO.init(100)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值