美文网首页
swift-31加载百度

swift-31加载百度

作者: sunmumu1222 | 来源:发表于2017-08-30 10:25 被阅读21次

我以前做的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
    
    }

}

相关文章

网友评论

      本文标题:swift-31加载百度

      本文链接:https://www.haomeiwen.com/subject/opmzdxtx.html