2016-03-02 49 views
0

我有检查如果XML元素有欲望的标签或者没有问题空:EXC_BAD_INSTRUCTION错误检查,如果XML元素中迅速

我写了类似下面我的代码:

//checking if link is empty 
if xml["rss"]["channel"]["item"][index]["source"].element!.attributes["url"] != "" { 
    Link = (xml["rss"]["channel"]["item"][index]["source"].element?.attributes["url"])! 
} else { 
    Link = "" 
} 

当我运行此代码我得到的错误:Thread3 EXC_BAD_INSTRUCTION,为我的第一行代码,但是当我运行的代码象下面这样: 它经历,如果,不明白,源元素根本不存在! 代码:

//checking if link is empty 
    if (xml["rss"]["channel"]["item"][index]["source"].element?.attributes["url"] as String?) != nil { 
    Link = (xml["rss"]["channel"]["item"][index]["source"].element?.attributes["url"] as String?)! 
    } else { 
     Link = "" 
    } 

如何,如果源元素在SWIFT 2存在或不检查?

FullCode:

let xml = SWXMLHash.parse(data) 

//one root element 
let count = xml["rss"]["channel"]["item"].all.count 
print(count) 

var Name = "" 
var Image = "" 
var Link = "" 
var Time = "" 

for var index = 0; index < count; index++ { 
    Name = xml["rss"]["channel"]["item"][index]["title"].element!.text! 
    Image = (xml["rss"]["channel"]["item"][index]["description"]["img"].element?.attributes["src"])! 

    //checking if time is empty 
    if let check_time = xml["rss"]["channel"]["item"][index]["pubDate"].element?.text! as String? { 
     Time = check_time 
    }else{ 
     Time = "" 
    } 

    //checking if link is empty 
    if let element = xml["rss"]["channel"]["item"][index]["source"].element?.attributes["url"] as String? where element != "" { 
     print("salalalalam") 
     print(Link) 
     Link = element 
    } else { 
     Link = "" 
    } 

回答

1

在你的第一个片段似乎元素是零,那么你的代码崩溃。 在你的第二个片段(因为元素为零)它只是通过槽。

如何使用条件选配装订斯威夫特?

let i:[Int?] = [1,2,10, nil] 
i.forEach { v in 
    if let x = v where x != 10 { 
     print("value passed the test:", x) 
    } else { 
     print("didn't pass the test:", v) 
    } 
} 
/* 
value passed the test: 1 
value passed the test: 2 
didn't pass the test: Optional(10) 
didn't pass the test: nil 
*/ 

UPDATE,根据你的笔记

if let url = xml["rss"]["channel"]["item"][index]["source"].element?.attributes["url"] { 
    Link = url 
} else { 
    Link = "" 
} 
+0

感谢答案,但我知道,我想知道的是我有更好的方法来检查,如果该元素是存在或不! – anonymox

+0

条件可选绑定,因为你在我的例子中看到的是答案... – user3441734

+0

如果你只是需要知道元素是否存在,根本就不使用绑定的where(条件部分)。 – user3441734