2017-04-23 55 views
-1

的Xcode大喊大叫錯誤初始值設定條件的結合必須有可選的類型,而不是「日期」

enter image description here

但我不知道發生什麼。我一直在尋找,我認爲這可能是關於鑄造和可選的。第一個給初始值設定條件的結合必須有可選的類型,而不是「日期」第二和第三給人初始值設定爲有條件的結合必須有可選的類型,而不是「雙」

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 
} 

與以下

@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? 

的SavedArticle-CoreDataProperties這將是真棒,如果有人能幫助我想通了什麼問題。我一整天都在爭吵,沒有任何幫助。謝謝! :)

回答

2

if let(和guard let)只能用於展開可選值。您可以在單獨的一行中使用常規的let語句分配這些值,或者直接將它們傳遞給函數,因爲它們不需要解包。

+1

請注意,如果數組爲零,'(topic.articleArrays ?? nil)!'仍然會導致運行時錯誤。您可能想使用'(topic.articleArrays [])'代替。 –

+0

非常感謝! – thunpisit

1

article.dateRetrieved,article.latitude和article.longitude不是可選項。他們沒有聲明?在他們的名字後面,所以他們永遠不會是零。因此,沒有必要 - 實際上這是一個錯誤 - 嘗試用「if let」聲明對它們進行解包。

刪除編譯器抱怨的三行代碼。

當您創建NewsArticle並將其附加到editedArticles時,可以將文章的這些屬性直接傳遞給NewsArticle的構造函數。

+1

非常感謝! – thunpisit

相關問題