Tôi biết mẫu này có tên, không nhớ nó là gì. Về cơ bản có một phương thức trả về một điều thoáng qua/trampoline điều khiển bản gốc thông qua một API. Mediator
có thể?Không thể triển khai mẫu thiết kế này trong Swift?
Tôi đã cố gắng để thực hiện điều đó trong một ví dụ đơn giản trong Swift sân chơi:
struct Count {
var value = 0
func adjuster() -> Adjuster {
return Adjuster(target:self)
}
}
struct Adjuster {
var target:Count
func increment(delta:Int) {
self.target.value = self.target.value + delta
}
}
var f = Count()
f.adjuster().increment(13)
Điều đầu tiên này không có gì helpfully nói với tôi rằng phương pháp increment
cần phải được đánh dấu mutating
. Đó là một chút không rõ ràng với tôi tại sao. Tôi sẽ nhận được lý do tại sao nếu nó đã được biến đổi var riêng của nó, nhưng không phải là var khác. Oh well. Vì vậy, tôi để cho IDE chèn đột biến cho tôi. Nhưng sau đó nó có vấn đề với trường hợp "thử nghiệm" dòng cuối cùng. Lỗi này tạo ra lỗi này:
...: error: cannot use mutating member on immutable value: function call returns immutable value
f.adjuster().increment(13)
~~^~~~~~~~~~
Tôi không hoàn toàn lúng túng sự cố ở đây. Nó cũng không cung cấp "sửa chữa nó" cho tôi. Vì vậy, những gì đang xảy ra ở đây? Làm thế nào để thực hiện mô hình này?
Theo các dấu hiệu từ Apple (như rất nhiều cuộc đàm phán tại WWDC), tôi tiếp tục cố gắng làm những điều TheValueWay (tm). Và tôi cứ va vào những bức tường như thế này. Càng có nhiều điều xảy ra, tôi càng tin tưởng rằng các Viện nghiên cứu Pedantic đang tiếp quản Apple: (Dù sao thì, câu trả lời của bạn đã giúp tôi nhìn thấy vấn đề ngay lập tức, cảm ơn. –