Как наследовать от NSTokenAttachmentCell в Swift? - PullRequest
0 голосов
/ 31 августа 2018

В Swift (и target-c) вы обычно не можете создавать подклассы NSTokenAttachmentCell. Однако, если я создаю соединительный заголовок и определяю заголовок для NSTokenAttachmentCell, я могу затем создать его подкласс в Swift.

Вот пример этого в target-c . NSTokenAttachmentCell не является общедоступной. Однако, если вы создадите для него заголовочный файл, вы можете создать его подкласс. Вы не можете создавать заголовочные файлы в Swift. Есть ли способ сделать это в Swift, кроме создания в заголовочном мосте?

#import <Cocoa/Cocoa.h>
#import "NSTokenAttachmentCell.h"

@interface BWTokenAttachmentCell : NSTokenAttachmentCell {}
@end

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Я создал системный модуль Swift swift package init --type executable. Единственным файлом в дополнение к стандартным файлам SPM был файл пользовательского заголовка, который не был общедоступным.

Теперь я могу использовать пакет системного модуля в качестве зависимости и подкласса класса Apple, который вы обычно не можете подклассировать.

Вот полный пример.

git clone https://github.com/saltzmanjoelh/TokenExample && cd TokenExample && swift test

Вы увидите правильное наследство

Success: - <TokenExample.CustomTokenAttachmentCell: 0x7fc1be803d10> #0
  - super: NSTokenAttachmentCell
    - super: NSTextAttachmentCell
      - super: NSCell
        - super: NSObject

Я использовал эти два руководства для справки:

судно-с-код-с Свифта-пакеты

импортирование-с-библиотека-в-скор

0 голосов
/ 31 августа 2018

Простой ответ - нет, вы не можете наследовать от частных классов.

Частный доступ ограничивает использование объекта прилагаемой декларацией и расширениями этой декларации, которые находятся в том же файле. Используйте частный доступ, чтобы скрыть подробности реализации определенной части функциональности, когда эти детали используются только в пределах одного объявления.

источник: https://docs.swift.org/swift-book/LanguageGuide/AccessControl.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...