Joh*_*wak 7 delegates private ios swift
这里有一小段Swift代码可以正常工作(其中"精细"定义为"解析!",为响应调用类方法而打印了一大堆Parse.parse):
import Foundation
class Parse {
class func parse(stream: NSInputStream) {
return Parser().parse(stream)
}
class Parser: NSObject, NSXMLParserDelegate {
func parse(stream: NSInputStream) {
let XMLParser = NSXMLParser(stream: stream)
let delegate = XMLParserDelegate()
XMLParser.delegate = delegate
XMLParser.parse()
}
class XMLParserDelegate: NSObject, NSXMLParserDelegate {
func parser(
parser: NSXMLParser,
didStartElement elementName: String,
namespaceURI: String?,
qualifiedName qName: String?,
attributes attributeDict: [NSObject : AnyObject])
{
NSLog("Parsing!")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用Swift的可见性功能时会出现问题.特别是,我不想让Parser其他文件看到该类(因为它没有理由可见).如果我通过它声明它private class Parser …,代码停止工作!parser:didStartElement:namespaceURI:qualifiedName:attributes:不再叫!
这一切对我来说都很奇怪,而不像它在任何其他语言中如何运作.因此,我觉得以下两件事之一必须是真的:
Swift的命名空间系统充其量是奇怪的.更明显的是,它似乎对我不利.
斯威夫特很好,我只是在做一些非常愚蠢的事情!如果是这样,那就太好了!请让我知道它是什么!
感谢大家的帮助!
编辑:这是一个略微修剪的版本.和以前一样,代码工作正常,直到Parser类标记为private:
import Foundation
class Parse {
class func parse(stream: NSInputStream) {
return Parser().parse(stream)
}
}
class Parser: NSObject, NSXMLParserDelegate {
func parse(stream: NSInputStream) {
let XMLParser = NSXMLParser(stream: stream)
XMLParser.delegate = self
XMLParser.parse()
}
func parser(
parser: NSXMLParser,
didStartElement elementName: String,
namespaceURI: String?,
qualifiedName qName: String?,
attributes attributeDict: [NSObject : AnyObject])
{
NSLog("Parsing!")
}
}
Run Code Online (Sandbox Code Playgroud)
小智 0
根据MartinR 所做的调查,这似乎是 Swift 1.2 中引入的一个错误(或类似的错误)。据推测,这种行为不是故意的,因为我不知道任何其他(合理的、静态类型的)语言将类标记为私有可以在运行时默默地破坏您的代码。我会跟进苹果公司,看看他们对此有何看法!