我以前做的swift笔记, 之前都是整理在onenote上, 最近想到整理出博客. 也方便自己查找, 可以当做自己的一份文档.
image.png
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
loadBaidu()
}
func loadBaidu() {
let p = Person(name: "老王", age: 99)
print(p?.name)
//URL 的构造函数可以返回nil
//构造函数就是实例化对象的
//init?(string: String)
let url = URL(string: "http://www.baidu.com/")
//发起网络请求
//- 与oc的区别 闭包的所有参数 需要自己写 oc是直接带入
//- 如果不关心的值 可以直接 '_' 忽略
URLSession.shared.dataTask(with: url!) { (data, _, error) in
// if error != nil {
// print("网络请求失败")
// return
// }
guard let data = data else {
print("网络请求失败 \(String(describing: error))")
return
}
// 将data 转换为String
let html = String(data: data, encoding: .utf8)
print(html)
}.resume()
}
}
image.png
import UIKit
class Person: NSObject {
var name: String?
var age: Int = 0
//便利构造函数
/**
1遍历构造函数允许返回 nil
-正常的构造函数一定会创建对象
*** - 判断给定的参数时候符合条件 如果不符合条件 直接返回nil 不会创建对象 减少内存开销
2**只有** 遍历构造函数中使用 'self.init' 构造当前对象
-没有 convenience 关键字的构造函数是负责创建对象的 反之用来检查条件的 本身不负责对象的创建
3如果要在遍历构造函数中使用 当前对象的属性 一定要在 self.init 之后
*/
/**
便利构造函数
目的
条件判断 只有满足条件 才实例化条件 可以防止造成不必要的内存开销
简化对象的创建
本身不负责属性的创建和初始化构造
特点
默认情况下 所有的构造方法都是指定构造函数 Designted
convenience 关键字修饰的构造方法就是便利构造函数
便利构造函数具有以下特点:
1可以返回 nil
2只有便利构造函数中可以调用 self.init()
3便利构造函数不能被 重写 或者 super
4便利构造函数主要用于条件检测 或者 简化对象创建(分类常见控件, 内部设置好UI控件的属性, 如frame, color, fontsize)
*/
convenience init?(name: String, age: Int) {
// self.init()
if age > 100 {
return nil
}
//Use of 'self' in property access 'name' before self.init initializes self
// self.name = name
self.init()
//执行到此 self 才允许被访问 才能够访问到对象的属性
self.name = name
self.age = age
}
}