Tuôn ra với sự phấn khích khi mở rộng Bool
, tôi nghĩ sẽ rất vui khi mở rộng các đóng cửa trong Swift (chúng tôi đã làm điều này mà không phiền phức chút nào trong Smalltalk, vậy tại sao không?).Không thể mở rộng đóng cửa trong Swift?
Dưới đây là sân chơi của tôi:
typealias NiladicClosure =() ->()
extension NiladicClosure {
var theAnswerToLife:Int {
return 42
}
}
let block:NiladicClosure = {}
block.theAnswerToLife
Nó không làm việc, nói rằng NiladicClosure does not have a member named 'theAnswerToLife'
. Nhìn vào bảng điều khiển, tôi có thêm thông tin một chút:
Playground execution failed: /var/folders/2k/6y8rslzn1m95gjpg534j7v8jzr03tz/T/./lldb/33726/playground119.swift:3:1: error: non-nominal type 'NiladicClosure' cannot be extended
extension NiladicClosure {
^ ~~~~~~~~~~~~~~
non-nominal type
là gì? Có mô hình/cách giải quyết không?
Các câu hỏi tương tự khác được đặt trước Swift 2, cũng đủ cụ thể để mọi người cung cấp giải pháp cho phần mở rộng cụ thể. Tôi quan tâm đến việc liệu Swift đóng cửa có phải là đối tượng lớp đầu tiên mà tôi có thể thêm hành vi bổ sung vào, giống như những thứ khác trong Swift.
Bạn không thể mở rộng việc đóng cửa. So sánh http://stackoverflow.com/questions/28317625/can-i-extend-tuples-in-swift (đó là về việc mở rộng các bộ dữ liệu, nhưng cùng một câu trả lời áp dụng cho các hàm/đóng). –
Bất kỳ ý tưởng _WHY_ tuples và đóng cửa không mở rộng? Trong trường hợp đóng cửa, có phải vì các bao đóng không bao giờ thực sự được hợp nhất với một đối tượng thực sự (hay cấu trúc)? (ít nhất, tôi không thể thấy bất cứ nơi nào họ làm) –
@TravisGriggs Đó là "[chủ yếu là một giới hạn thực hiện] (https://twitter.com/jckarter/status/611656674391097344)". –