TL; DR
Можно ли расширить частный класс и класс, определенный в расширении, например NewsParser
?
Соответствующие документы
swift2 - Расширение вложенного типа в Swift - Переполнение стека говорит о похожей ситуации, за исключением того, что тип вложенного класса не является закрытым.
У меня есть класс NewsPost
:
class NewsPost {
var title: String?
var author: String?
var mainContent: NSAttributedString?
var data: Data? {
didSet {
let newsParser = NewsParser(delegate: self)
newsParser.parse()
}
}
// Init methods and other stuff...
}
И NewsPost
класс NewsParser
: (в другом файле Swift, но, похоже, это не такбыть фактором, из-за SR-631 )
private extension NewsPost {
private class NewsParser {
weak var delegate: NewsPost?
// Other properties for parsing...
init(delegate: NewsPost) {
self.delegate = delegate
}
func parse() {
// parse the delegate.data and update properties in delegate (NewsPost instance)
}
// Other methods to be called for parsing...
}
}
Но представляется невозможным продлить NewsPost.NewsParser
.
Следующие попыткине работают:
Попытка 1
Ошибка: «NewsParser» недоступен из-за уровня защиты «fileprivate»
private extension NewsPost { // Notice the "private" prefix
class NewsParser {
weak var delegate: NewsPost?
//Other properties for parsing...
init(delegate: NewsPost) {
self.delegate = delegate
}
func parse() {
// parse the delegate.data and update properties in delegate (NewsPost instance)
}
// Other methods to be called for parsing...
}
}
Ошибка происходит вNewsPost
определение:
var data: Data? {
didSet {
let newsParser = NewsParser(delegate: self) // error happens here
newsParser.parse()
}
}
Попытка 2
Ошибка: «NewsParser» недоступен из-за «частного» уровня защиты
extension NewsPost {
private class NewsParser { // Notice the "private" prefix
var delegate: NewsPost
// Other properties for parsing...
func parse() {
// parse the delegate.data and update properties in delegate (NewsPost instance)
}
// Other methods to be called for parsing...
}
}
extension NewsPost.NewsParser { // error happens here
// extensions here...
// many kinds of errors happen here
}
Можно ли расширить частный класс и класс, определенный в расширении, то есть NewsParser
?