【问题标题】:Initializer for conditional binding must have Optional type, not 'Date'条件绑定的初始化程序必须具有可选类型,而不是“日期”
【发布时间】:2017-09-19 22:24:47
【问题描述】:

Xcode 报错

但我不知道会发生什么。我一直在寻找,我认为这可能是关于铸造和可选的。第一个给出 Initializer for conditional binding must have Optional type, not 'Date' 第二个和第三个给出 Initializer for conditional binding must have Optional type, not 'Double'

for article in (topic.articleArrays ?? nil)!{
            if let articleId = article.id,
            let articleHeadline = article.headline,
            let articleSummary = article.summary,
            let articleCity = article.city,
            let articleState = article.state,
            let articleDateretrieved = article.dateRetrieved,
            let articlePublisher = article.publisher,
            let articleLatitude = article.latitude,
            let articleLongitude = article.longitude,
            let articleRawBaseUrl = article.rawBaseUrl,
            let articleRawUrl = article.rawUrl {
                editedArticles?.append(NewsArticle(id: articleId, headline: articleHeadline, publisher: articlePublisher, summary: articleSummary, rawUrl: articleRawUrl, rawBaseUrl: articleRawBaseUrl, retrieved_date: articleDateretrieved, city: articleCity, state: articleState, latitude: articleLatitude, longitude: articleLongitude))
            }
        }

ediedArticles 的结构是我在下面列出的 NewsArticle

struct NewsArticle {
var id: String
var headline: String
var publisher: String
var summary: String
var rawUrl: String
var rawBaseUrl: String
var retrieved_date: Date
var city: String
var state: String
var latitude: Double
var longitude: Double
init(id: String, headline: String, publisher: String, summary: String, rawUrl: String, rawBaseUrl: String, retrieved_date: Date, city: String, state: String, latitude: Double, longitude: Double) {
    self.id = id
    self.headline = headline
    self.publisher = publisher
    self.summary = summary
    self.rawUrl = rawUrl
    self.rawBaseUrl = rawBaseUrl
    self.retrieved_date = retrieved_date
    self.city = city
    self.state = state
    self.latitude = latitude
    self.longitude = longitude
    }
}

topic.articlesArray 有不同的数据结构类型 SavedArticle (CoreData)

var articleArrays: [SavedArticle]? {
    return self.articles?.allObjects as? [SavedArticle]
}

并拥有 SavedArticle-CoreDataClass

var dateRetrieved: Date {
    get {
        return retrieved_date as Date
    }
    set(newDate) {
        retrieved_date = newDate as NSDate
    }
}

// TODO: Figured it out how to stored corrdinates in [Double]

convenience init?(id: String, headline: String, publisher: String, summary: String, retrieved_date: Date, city: String, state: String, latitude: Double, longitude: Double) {

    guard let context = NaberCoreDataHandler.sharedInstance.managedContext else { return nil }
    self.init(entity: SavedArticle.entity(), insertInto: context)

    self.id = id
    self.headline = headline
    self.publisher = publisher
    self.summary = summary
    self.dateRetrieved = retrieved_date
    self.city = city
    self.state = state
    self.latitude = latitude
    self.longitude = longitude
}

具有以下 SavedArticle-CoreDataProperties

@NSManaged public var city: String?
@NSManaged public var headline: String?
@NSManaged public var id: String?
@NSManaged public var publisher: String?
@NSManaged public var rawBaseUrl: String?
@NSManaged public var rawUrl: String?
@NSManaged public var retrieved_date: NSDate
@NSManaged public var state: String?
@NSManaged public var summary: String?
@NSManaged public var latitude: Double
@NSManaged public var longitude: Double
@NSManaged public var topics: SavedTopic?

如果有人能帮我找出问题所在,那就太好了。我一整天都在努力,没有任何帮助。谢谢! :)

【问题讨论】:

    标签: ios swift xcode core-data optional


    【解决方案1】:

    article.dateRetrieved、article.latitude 和 article.longitude 不是可选项。他们不是用 ?在它们的类型名称之后,所以它们永远不能为零。因此没有必要——事实上这是一个错误——尝试用“if let”语句解开它们。

    删除编译器抱怨的三行代码。

    当您创建 NewsArticle 并将其附加到editedArticles 时,您可以将文章的这些属性直接传递给 NewsArticle 的构造函数。

    【讨论】:

    • 非常感谢!
    【解决方案2】:

    if let(和guard let)只能用于解开可选值。您可以使用常规的 let 语句在单独的行上分配这些值,或者直接将它们传递给函数,因为它们不需要解包。

    【讨论】:

    • 附带说明,如果数组为 nil,(topic.articleArrays ?? nil)! 仍会导致运行时错误。您可能想改用(topic.articleArrays ?? [])
    • 非常感谢!
    猜你喜欢
    • 2019-03-11
    • 2017-01-22
    • 2018-03-25
    • 2016-01-08
    • 2017-04-08
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多