//
// Person.swift
// 011-加载百度
//
// Created by 庄壮勇 on 2018/1/9.
// Copyright © 2018年 Personal. All rights reserved.
//
import UIKit
1.创建Personl 类
class
Person:
NSObject
{
var name: String ?
var age: Int = 0
// 重载构造函数
/**
1. 便利构造函数允许返回nil
- 正常的构造函数一定会创建对象
- 判断给定的参数是否符合条件,如果不符合条件,直接返回nil,不会创建对象,减少内存开销!
2. **只有** 便利构造函数中使用 'self.init' 构造当前对象
- 没有 convenience 关键字的构造函数是负责创建对象的,反之用来检查条件的,本身不负责对象的创建
3. 如果要在便利构造函数中使用 当前对象的属性,一定要在self.init 之后
*/
convenience init ?(name: String , age: Int ){
if age > 100 {
return nil
}
// Use of 'self' in property access 'name' before self.init initializes self
// 使用 self 访问 name 之前,应该调用 self.init
// self.name = name
// 实例化当前对象
self . init ()
// 执行到此 self 才允许被访问,才能够访问到对象的属性
self . name = name
}
override init () {
// super.init()
// self.init()
}
// 没有 func -> 不让调用
// 没有 () -> 不让重载 不允许带参数
// 在对象被销毁前自动调用
// 类似于 OC 的dealloc
deinit { // 析构函数
// 1. 跟踪对象的销毁
// 2. 必须释放的
/**
- 通知 不释放不会崩溃 ,但是会泄漏
- KVO 不释放会崩溃
- NSTimer / CADisplayLink 不销毁会循环引用
*/
}
var name: String ?
var age: Int = 0
// 重载构造函数
/**
1. 便利构造函数允许返回nil
- 正常的构造函数一定会创建对象
- 判断给定的参数是否符合条件,如果不符合条件,直接返回nil,不会创建对象,减少内存开销!
2. **只有** 便利构造函数中使用 'self.init' 构造当前对象
- 没有 convenience 关键字的构造函数是负责创建对象的,反之用来检查条件的,本身不负责对象的创建
3. 如果要在便利构造函数中使用 当前对象的属性,一定要在self.init 之后
*/
convenience init ?(name: String , age: Int ){
if age > 100 {
return nil
}
// Use of 'self' in property access 'name' before self.init initializes self
// 使用 self 访问 name 之前,应该调用 self.init
// self.name = name
// 实例化当前对象
self . init ()
// 执行到此 self 才允许被访问,才能够访问到对象的属性
self . name = name
}
override init () {
// super.init()
// self.init()
}
// 没有 func -> 不让调用
// 没有 () -> 不让重载 不允许带参数
// 在对象被销毁前自动调用
// 类似于 OC 的dealloc
deinit { // 析构函数
// 1. 跟踪对象的销毁
// 2. 必须释放的
/**
- 通知 不释放不会崩溃 ,但是会泄漏
- KVO 不释放会崩溃
- NSTimer / CADisplayLink 不销毁会循环引用
*/
}
}
2.ViewController
//
// ViewController.swift
// 011-加载百度
//
// Created by 庄壮勇 on 2018/1/9.
// Copyright © 2018年 Personal. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super . viewDidLoad ()
let p = Person (name: "老王" , age: 10 )
print ( " \ ( p?. name )" )
// URL 的构造函数可以返回nil
// 构造函数就是实例化对象的!
// init?(string: String) ->构造函数可以返回nil
let url = URL (string: "http://www.baidu.com" )
// 发起网络气球
URLSession . shared . dataTask (with: url!) { (data, _ , error) in
// if(error != nil){
// print("网络请求失败")
// return
// }
guard let data = data else {
print ( "网络请求失败 \ ( error )" )
return
}
// 将data 转换为String
let html = String (data: data, encoding: . utf8 )
// ViewController.swift
// 011-加载百度
//
// Created by 庄壮勇 on 2018/1/9.
// Copyright © 2018年 Personal. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super . viewDidLoad ()
let p = Person (name: "老王" , age: 10 )
print ( " \ ( p?. name )" )
// URL 的构造函数可以返回nil
// 构造函数就是实例化对象的!
// init?(string: String) ->构造函数可以返回nil
let url = URL (string: "http://www.baidu.com" )
// 发起网络气球
URLSession . shared . dataTask (with: url!) { (data, _ , error) in
// if(error != nil){
// print("网络请求失败")
// return
// }
guard let data = data else {
print ( "网络请求失败 \ ( error )" )
return
}
// 将data 转换为String
let html = String (data: data, encoding: . utf8 )
print
(html)
}.
resume
()
}
}
}
}