- 引用类型就是指针类型
- 构造函数不需要要返回值
- 扩充构造函数(不会)【也可以扩充字典转模型的构造函数】
- 函数既可以作为某个函数的参数,也可以作为某个函数的返回值
- [int] 表示数组类型,数组里面对象的类型是整型
- 引用传递,就是指针传递
- 结构体中的是值传递
- oc中的dealloc方法就是swift中的析构函数(deinit)
- swift既可以让类不继承父类,直接写class 类名{},也可以继承父类class 类名:父类{}
函数中数组的两种写法
本质: [Int] 和 Array<Int> 等价
let array = [12, 11, 3, 5, 8, 10, 22]
func getNumCount(nums : [Int]) -> (oddCount : Int, evenCount : Int) {
}
let count = getCount(array)
等价
let array = [12, 11, 3, 5, 8, 10, 22]
func getNumCount(nums : Array<Int>) -> (oddCount : Int, evenCount : Int) {
}
let count = getCount(array)
用可选类型 接收不同类型的赋值
本质: Int? 和 Optional<Int> 等价
let str = "123"
let age : Int? = Int(str) //语法糖的写法
等价
let str = "123"
let age : Optional<Int> = Int(str)
swift判断质数还是合数【自己独立思考做出来的】
// 质数是指除了1和它本身以外,不能被任何整数整除的数(质数必须是自然数,不包括负数或者小数)。
// 合数除能被1和他本身整除外,还可以被其他数整除的数
let nums = [1,5, 3, 4, 8, 22, 23,25]
func getNumCount(nums : [Int]) -> (zhishuCount : Int, heshuCount : Int) {
var zhishuCount = 0
var heshuCount = 0
for num in nums {
if num == 1{
print("\(num)既不是质数也不是合数")
continue;// 结束本次循环
}
for var i = 2; i < num; i++ {
if num % i == 0{
print("\(num)是合数")
zhishuCount++;
//精华:保证只要出现匹配的数字,直接跳出循环,防止多次记录质数的个数.
//如22,会被2,11整除,所以会记录两次。利用break,被2整除直接跳出第二个for循环了
break; //结束第二个for中的所有循环
}else{
print("\(num)是质数")
heshuCount++;
break;
}
}
}
return (zhishuCount, heshuCount)
}
let count = getNumCount(nums)
print("质数的个数是:\(count.zhishuCount),合数的个数是:\(count.heshuCount)")
// 等价上面的代码 print("质数的个数是:\(count.0), 合数的个数是:\(count.1)")
打印结果
1既不是质数也不是合数
5是质数
3是质数
4是合数
8是合数
22是合数
23是质数
25是质数
质数的个数是:3,合数的个数是:4
可选类型的练习
is的用法
as? as!的用法:
函数的基本使用
函数的内部参数和外部参数
函数的参数
函数作为另一个函数的参数、作为另一个函数的返回值
枚举类型的使用
结构体的使用
结构体的扩充(扩充构造函数)
结构体的扩充(扩充函数)
类的基本使用
字典转模型(KVC)
- 使用kvc,类必须继承NSObject,因为字典转模型的函数setValuesForKeysWithDictionary属于NSObjct。
- 必须调用super.init()
析构函数
类的属性
类的监听