无法解开我的变量

时间:2015-10-20 16:53:03

标签: ios swift

编辑1:我定义与“作者”变量相关的所有位置(在底部)

有人可以告诉我为什么我的标签仍然说“可选()”。我的变量应该通过这段代码解包,如果不是吗?我正在获取JSON数据,将其解析为本地对象,然后在带有标签的表视图(以及后续详细视图)中使用这些对象。

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

let row = indexPath.row

guard let cell = tableView.dequeueReusableCellWithIdentifier(EditorialTableCellIdentifier, forIndexPath: indexPath) as? EditorialsTableViewCell else {
    print ("error: editorialsTableView cell is not of class EditorialsTableViewCell, we will use RandomTableViewCell instead")
    return tableView.dequeueReusableCellWithIdentifier(EditorialTableCellIdentifier, forIndexPath: indexPath) as! RandomTableViewCell
}

if let editorialObject = editorialObjects.objectAtIndex(indexPath.row) as? EditorialElement {
    // we just unwrapped editorialObject

    let title = editorialObject.title ?? "" // if editorialObject.title == nil, then we return an empty string.

    let timeStampDateObject = NSDate(timeIntervalSince1970: NSTimeInterval(editorialObject.timeStamp))
    let timeStampDateString = dateFormatter.stringFromDate(timeStampDateObject)

    let author = editorialObject.author ?? ""

    let issueNumber = editorialObject.issueNumber ?? ""
    let volumeNumber = editorialObject.volumeNumber ?? ""

    let articleContent = editorialObject.articleContent ?? ""

    let nodeID = editorialObject.nodeID ?? 0


    cell.editorialHeadlineLabel.font = UIFont.preferredFontForTextStyle(UIFontTextStyleHeadline)
    cell.editorialHeadlineLabel.text = title

    cell.editorialAuthorLabel.font = UIFont.preferredFontForTextStyle(UIFontTextStyleSubheadline)
    cell.editorialAuthorLabel.text = String(author)

    cell.editorialPublishDateLabel.font = UIFont.preferredFontForTextStyle(UIFontTextStyleSubheadline)
    cell.editorialPublishDateLabel.text = timeStampDateString

} else {

}

return cell
}

班级代码:

class EditorialElement: NSObject {

var title: String           // title
var nodeID: Int             // nid
var timeStamp: Int       // revision_timestamp
var imageURL: String       // image_url
var author: String       // author

var issueNumber: String     // issue_int
var volumeNumber: String    // volume_int

var articleContent: String // html_content

init(title: String, nodeID: Int, timeStamp: Int, imageURL: String, author: String, issueNumber: String, volumeNumber: String, articleContent: String) {
    self.title = title
    self.nodeID = nodeID
    self.timeStamp = timeStamp
    self.imageURL = imageURL
    self.author = author
    self.issueNumber = issueNumber
    self.volumeNumber = volumeNumber
    self.articleContent = articleContent
}

override func isEqual(object: AnyObject!) -> Bool {
    return (object as! EditorialElement).nodeID == self.nodeID
}

override var hash: Int {
    return (self as EditorialElement).nodeID
}

}

编辑1:以下是与作者相关的所有内容(编辑后)

在我的IssueElement类中:

    var author: String          // author

在我的populateCurrentIssue函数中:

issueElement.author = String(node.1["author"])

在我的cellForRowAtIndexPath中(在

中)
if let currentIssueObject = currentIssueObjects.objectAtIndex(indexPath.row) as? IssueElement

环。

let author = currentIssueObject.author

最后:

cell.currentIssueArticlesAuthorLabel.font = UIFont.preferredFontForTextStyle(UIFontTextStyleSubheadline)
cell.currentIssueArticlesAuthorLabel.text = author

1 个答案:

答案 0 :(得分:0)

查看您的代码,editorialHeadlineLabel在任何情况下都不应显示“Optional()”。

editorialAuthorLabel可以是可选的,因为如果构造函数无法初始化字符串,String()可以是可选的。

editorialPublishDateLabel可以是可选的,因为如果您传递的是无效日期,stringFromDate()将返回nil。