代码之家  ›  专栏  ›  技术社区  ›  ahmetvefa53

swift 4弱变量

  •  0
  • ahmetvefa53  · 技术社区  · 8 年前

    在下面的代码中,为什么当car1变量被赋值为nil时,car2不是nil?

    非常感谢。

    class ViewController: UIViewController {
        var car1 : Car? = Car()
        weak var  car2 : Car?
    
        override func viewDidLoad() {
            super.viewDidLoad()
            car2 = car1
            car1 = nil
            print("gfehtre")
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    }
    
    2 回复  |  直到 8 年前
        1
  •  0
  •   Ladislav    8 年前

    不知道你的问题是什么: car2 不是只有当 car2 = car1 在下一行执行 car1 = nil 赛车总动员2 也变成了零,

    override func viewDidLoad() {
        super.viewDidLoad()
    
        if let _ = car2 {
            print("first")
        }
    
        car2 = car1
    
        if let _ = car2 {
            print("second")
        }
    
        car1 = nil
    
        if let _ = car2 {
            print("third")
        }
    }
    

    您将在控制台中看到 second 在所有其他情况下都会打印 赛车总动员2

        2
  •  0
  •   ukim    8 年前

    你怎么在操场上测试的?是 viewDidLoad() 真的打过电话吗?我在操场上的代码 car2 会变成 nil

    class Car {
        deinit {
            print("deinit")
        }
    }
    
    class ViewController: UIViewController {
        var car1 : Car? = Car()
        weak var  car2 : Car?
    
        override func viewDidLoad() {
            super.viewDidLoad()
            car2 = car1
            car1 = nil
            print("Is car2 nil?: \(car2 == nil)")
        }
    }
    
    let vc = ViewController()
    vc.loadViewIfNeeded()
    

    印刷的:

    \\ deinit
    \\ Is car2 nil?: true
    
    推荐文章