Tôi muốn tổ một giao thức trong lớp học của tôi để thực hiện mô hình đại biểu như vậy:giao thức Swift lồng nhau trong một lớp học
class MyViewController : UIViewController {
protocol Delegate {
func eventHappened()
}
var delegate:MyViewController.Delegate?
private func myFunc() {
delegate?.eventHappened()
}
}
Nhưng trình biên dịch sẽ không cho phép nó:
Tuyên bố là chỉ hợp lệ ở phạm vi tệp
Tôi có thể dễ dàng làm cho nó hoạt động bằng cách tuyên bố MyViewControllerDelegate
ngoài phạm vi lớp học.
Câu hỏi của tôi là lý do tại sao giới hạn như vậy?
Giao thức ủy quyền được dự định sẽ được thực hiện bởi người dùng của lớp này. Những gì bạn mô tả như là một vấn đề không phải là một vấn đề - đó là một mẫu thiết kế phần mềm thiết yếu được sử dụng trong suốt các khuôn khổ Cocoa & CocoaTouch của Apple. –
Bạn có thể xem tổng quan đầy đủ về cách các đại biểu được sử dụng trong Cocoa _ (và mở rộng, Objective-C & Swift, vì trước đây được thiết kế song song với Cocoa và sau đó chủ yếu cho các ứng dụng Cocoa) _ trong Apple [ Hướng dẫn về năng lực cốt lõi của Cocoa, phần Ủy quyền] (https://developer.apple.com/library/content/documentation/General/Conceptual/DevPedia-CocoaCore/Delegation.html#//apple_ref/doc/uid/TP40008195-CH14-SW1). –