Swift4.0 学习笔记 第二十四节:遍历构造函数和加载百度



//
//  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 不销毁会循环引用
         */
    }
   
}
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 )
            print (html)
        }. resume ()
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值