С волнением от расширения Bool
я подумал, что было бы интересно продлить замыкания в Swift (мы сделали это без всякой суеты в Smalltalk, так почему бы и нет?).
Здесь моя детская площадка:
typealias NiladicClosure = () -> ()
extension NiladicClosure {
var theAnswerToLife:Int {
return 42
}
}
let block:NiladicClosure = {}
block.theAnswerToLife
Это не работает, говоря, что NiladicClosure does not have a member named 'theAnswerToLife'
. Глядя в консоль, я получаю немного больше информации:
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
? Есть шаблон/обход?
Другие подобные вопросы, предшествовавшие Swift 2, также были достаточно конкретными, чтобы люди предлагали обходные пути к конкретному расширению. Меня интересует, являются ли закрытие Swift объектами первого класса, к которым я могу добавить дополнительное поведение, как и другие вещи в Swift.