2017-03-10 29 views
0

我正在从URL获取数据,它将返回到Json中。我想要做的是如果特定的Json列不包含null或Nil,则将某个按钮颜色为蓝色。这就是我的JsonIOS Swift错误读取Json字符串值

{ “票”: “0”, “vote_status”:空},{ “票”: “1”, “vote_status”: “11”}

,你可以看到字段vote_status返回为一个字符串,但如果该值为null,那么它周围没有任何引号。我怎么能在我的代码检查空值

// This will store all the vote_status values 
    var VoteStatus = [String]() 

    // captures the value 
     if var vote_Status = Stream["vote_status"] as? String { 

          self.VoteStatus.append(vote_Status) 
         } 

不过,我得到一个错误致命错误:超出范围的索引

这我肯定这是因为空值不具有任何字符串。有没有一种方法可以检查NULL值并将它们更改为“null”之类的内容?我试过这样做

if var voteStatus = Stream["vote_status"] as? String { 
           if vote_Status == nil { 
            vote_Status = "null" 
           } 
           self.VoteStatus.append(vote_Status) 
          } 

它声明比较字符串的非可选值与nil总是为false。上面的代码编译但在运行时给出错误。我是新来的斯威夫特,但任何建议将是伟大的..

回答

1

你得到该编译时错误的原因是,如果通过:if var voteStatus = Stream["vote_status"] as? String {那么这是一个保证Stream["vote_status"]是一个非零的字符串值。如果你想要做不同的事情,如果这是一个零,那么只要把else声明:

if var voteStatus = Stream["vote_status"] as? String { 
    //Do whatever you want with a guaranteed, non-nil String 
} else { 
    //It's nil 
} 

如果你也想治疗字符串"null"作为一个零值,你可以添加一个点点:

if var voteStatus = Stream["vote_status"] as? String, voteStatus != "null" { 
    //Do whatever you want with a guaranteed, non-nil, non-"null" String 
} else { 
    //It's nil or "null" 
} 

index out of range错误很可能是由我们在您的代码中看不到的东西引起的。 Stream本身是可选的吗?在你的第二个例子中,你忘记初始化你的voteStatus阵列吗?

+0

非常感谢,这正是我们需要的 –