Это не существует как таковое в языке.
Одним из вариантов является вычисляемое вспомогательное свойство:
struct S {
let i: Int
let b: Bool
}
extension S {
var destructured: (Int, Bool) {
return (self.i, self.b)
}
}
let s = S(i: 10, b: false)
let (i, b) = s.destructured
Конечно, вы должны вручную синхронизировать его. Возможно, Sourcery мог бы помочь с этим.
Я думаю, что Andy закрепил этот ответ, но я не уверен, что аспект относительно правил загрузки CLR является точно правильным.
Блок.NET, который содержит класс, действующий как обертка для GZipStream, был бы выставлен COM и зарегистрирован точно так же, как любая другая библиотека проекта COM и класс. В этом отношении VBA нашел бы местоположение COM-выставленного блока.NET с помощью реестра. Могло бы быть умно поместить блок в GAC, так, чтобы это не могло переместиться (так как перемещение блока делало бы недействительным информацию о реестре), но пока реестр указывает на правильное место, это должно быть прекрасным.
Учебное руководство хорошего новичка на предмете здесь
Надеюсь, это поможет...
VBA может использовать любые объекты.NET, которые выставляются COM. Я не знаю, ли GZipStream или нет, но я предположил бы, что для Вас было бы легче создать отдельный объект.NET, который является оберткой вокруг функциональности GZipStream, который Вы хотите использовать. Можно затем выставить объект COM, и затем VBA должен использовать его.
Обратите внимание, что блок, содержащий Ваш COM-объект (и его библиотека типов также, я думаю, хотя я не положителен относительно этого), должен или быть в том же каталоге как основной исполняемый файл (winword.exe, или безотносительно) или в GAC. Это происходит из-за правил загрузки CLR для блоков.