Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift问题中的NSXMLDelegate_Ios_Swift_Nsxmlparserdelegate - Fatal编程技术网

Ios Swift问题中的NSXMLDelegate

Ios Swift问题中的NSXMLDelegate,ios,swift,nsxmlparserdelegate,Ios,Swift,Nsxmlparserdelegate,我试图在Swift中实现NSXMLParserDelegate,但在某些委托方法中使用属性字典时遇到问题。例如,在解析器中:didStartElement:: func parser(parser: NSXMLParser!, didStartElement elementName: String!, namespaceURI: String!, qualifiedName qName: String!, attributes attributeDict: [NSObject : AnyObje

我试图在Swift中实现NSXMLParserDelegate,但在某些委托方法中使用属性字典时遇到问题。例如,在
解析器中:didStartElement:

func parser(parser: NSXMLParser!, didStartElement elementName: String!, namespaceURI: String!, qualifiedName qName: String!, attributes attributeDict: [NSObject : AnyObject]!) {
正在尝试访问attributeDict值,如:

if self.feedType == FeedType.RSS {
    self.insideLink = true
} else {
    if (String(attributeDict["rel"]) == "alternate") && (String(attributeDict["type"]) == "text/html") {
        self.link = String(attributeDict["href"])
        self.insideLink = false
        self.doneWithLink = true
    }
}
我收到一条错误消息:“'String'不能转换为'FeedType'”

这是一个错误。这一主题的其他十几个变体也是如此。。。有什么见解吗


我想问题是如何正确使用
attributeDict
中类型为
[NSObject:AnyObject]
的键/值对?

看起来您可能有错误消息:我建议

我想问题是如何正确使用
attributeDict
中类型为
[NSObject:AnyObject]

你说得对:这似乎是问题的根源。解决方案不是从字典查找中构造
字符串
,而是(有条件地)转换为
字符串
。也就是说,与其尝试从不确定(可选)类型的引用创建新的
字符串
,不如询问Swift该引用是否实际指向可解释为
字符串的内容:

let rel = attributeDict["rel"] as? String
这将为您提供一个可选选项,这是因为
attributeDict
可能不包含键
rel
的值,并且条件转换可能会失败(
attributeDict[“rel”]
可能是另一种类型的值)。因为您需要检查两个条件强制转换及其展开值,所以如果让
块。。。那会很快变丑的

相反,您可以利用
Optional
是枚举这一事实。其定义如下:

enum Optional<T> {
    case None    // aka nil
    case Some(T) // what you get when you unwrap a non-nil optional
}
请注意,在“收获链接”步骤中,您仍然需要有条件地强制转换和展开
attributeDict[“href”]
查找。您可以通过将
if let
构造嵌套在该
案例
中,或者通过向
开关
元组添加第三个查找来实现这一点



顺便说一句,在Swift中,所有的
self.
符号都是不必要的(除非您处于闭包中或需要从实例属性中消除方法参数的歧义)。

看起来您可能有一个虚假的错误消息:我建议您这样做

我想问题是如何正确使用
attributeDict
中类型为
[NSObject:AnyObject]

你说得对:这似乎是问题的根源。解决方案不是从字典查找中构造
字符串
,而是(有条件地)转换为
字符串
。也就是说,与其尝试从不确定(可选)类型的引用创建新的
字符串
,不如询问Swift该引用是否实际指向可解释为
字符串的内容:

let rel = attributeDict["rel"] as? String
这将为您提供一个可选选项,这是因为
attributeDict
可能不包含键
rel
的值,并且条件转换可能会失败(
attributeDict[“rel”]
可能是另一种类型的值)。因为您需要检查两个条件强制转换及其展开值,所以如果让
块。。。那会很快变丑的

相反,您可以利用
Optional
是枚举这一事实。其定义如下:

enum Optional<T> {
    case None    // aka nil
    case Some(T) // what you get when you unwrap a non-nil optional
}
请注意,在“收获链接”步骤中,您仍然需要有条件地强制转换和展开
attributeDict[“href”]
查找。您可以通过将
if let
构造嵌套在该
案例
中,或者通过向
开关
元组添加第三个查找来实现这一点



顺便说一句,Swift中不需要所有的
self.
符号(除非您处于闭包中或需要从实例属性中消除方法参数的歧义)。

您可以发布错误吗?错误:'String'不能转换为'FeedType'。在哪一行报告该错误?该行上使用的值的声明是什么?第二个if语句中报告了错误:if(String(attributeDict[“rel”])==“alternate”)…您可以发布错误吗?错误:'String'不能转换为'FeedType'。在哪一行报告了错误?该行上使用的值的声明是什么?第二个if语句中报告了错误:if(字符串(attributeDict[“rel”])==“alternate”)…请注意,虽然同时展开多个选项的
开关
模式仍然有效(在某些情况下仍然特别有用),它不再是一次打开多个选项的唯一方法-在一个
if let
语句中可以放置多个绑定。请注意,虽然一次打开多个选项的
开关
模式仍然有效(对于某些情况仍然特别有用),它不再是一次打开多个选项的唯一方法-在一个
if let
语句中可以放置多个绑定。