2016-08-10 16 views
5

Tôi rất mới để Swift và lập trình nói chung, một chút về Fortran 77 cách trở lại, và gần đây hơn một số lập trình đơn giản của vi điều khiển. Tôi đang làm việc thông qua những điều cơ bản và tất cả đã được tốt cho đến khi tôi đi qua một cái gì đó mà tôi chỉ có thể không hoàn toàn có được để hiểu thấu với - đại biểu. Tất cả các bài viết trực tuyến không hoàn toàn có được khái niệm trên, ít nhất là cho tôi, vì vậy để cho bản thân mình một cái gì đó mà tôi có thể tham khảo lại, tôi đã thiết lập một mẫu cơ bản được hiển thị bên dưới trong sân chơi. Nếu tôi chạy mã bên dưới nó hoạt động và in "Something done" cho terminal, nhưng nếu tôi làm giao thức là một giao thức "class", nghĩa là "protocol SomeDelegate: class {" và làm cho "var delegate" là "weak var delegate" như được đề xuất trong các bài đăng khác nhau, nó không hoạt động - tôi đang làm gì sai?Đại biểu nhanh chóng đơn giản trong sân chơi nhanh chóng

import UIKit 

protocol SomeDelegate { 
    func DoSomething() 
} 

class MyViewcontroller: UIViewController, SomeDelegate { 

    func DoSomething() { 
     print("Something done") 
    } 

} 


class OtherClass { 

    var delegate: SomeDelegate? 


    func DoSomething() { 

     delegate?.DoSomething() 

    } 
} 


var myVar = OtherClass() 
myVar.delegate = MyViewcontroller() 
myVar.DoSomething() 

Trả lời

3

Nó không in vì đại biểu không đúng ngay sau khi bạn đặt. Lý do cho điều này là đơn giản: không có trường hợp nào sở hữu nó (số tham chiếu bằng không). Không ai sở hữu delegate vì bạn đã tuyên bố đó là tài sản yếu của OtherClass. Thử thiết lập quyền sở hữu, ví dụ:

var myVar = OtherClass() 
let viewController = MyViewController() 
myVar.delegate = viewController 

Mặc dù đại biểu yếu, bây giờ nó sẽ in lại Something done. Tuyên bố các đại biểu có ý nghĩa yếu bởi vì nó ngăn cản các tham chiếu vòng tròn khiến đại biểu không bao giờ được giải phóng trong bộ nhớ - đó là một câu chuyện hoàn toàn khác - hãy kiểm tra cách tính toán tham chiếu, sau đó bạn sẽ hiểu tại sao đây là một thực hành tốt.

Các vấn đề liên quan