2016-11-08 111 views
1

我一直在試圖將現有的swift2.3轉換爲swift3。我得到了在下面的代碼中對intValue錯誤模糊使用。intValue的模糊使用Swift3

jobPackageVersion.intJobPackageId =(JobPackageVersionDictionary [ 「intJobPackageId」]!作爲AnyObject).intValue作爲NSNumber的

這裏是全碼

if let url = Bundle.main.url(forResource: "tblJobPackageVersion", withExtension: "csv") { 
    do { 
    let strData = try String(contentsOf: url) 
    let csv = CSwiftV(String: strData) 

    if csv.keyedRows != nil { 
     for dictionary in csv.keyedRows! { // [Dictionary<String, String>] 
     let JobPackageVersionDictionary = dictionary as NSDictionary // Cast to NSDictionary 
     let JobPackageVersionEntity = NSEntityDescription.entity(forEntityName: "JobPackageVersion", in: context) 
     let jobPackageVersion = JobPackageVersion(entity: JobPackageVersionEntity!, insertInto: context) 

     // Set object attributes 
     jobPackageVersion.intJobPackageId = (JobPackageVersionDictionary["intJobPackageId"]! as AnyObject).intValue as NSNumber 
     jobPackageVersion.intJobPackageVersionId = (JobPackageVersionDictionary["intJobPackageVersionId"]! as AnyObject).intValue as NSNumber 
     jobPackageVersion.intStatus = (JobPackageVersionDictionary["intStatus"]! as AnyObject).intValue as NSNumber 
     jobPackageVersion.intVersion = (JobPackageVersionDictionary["intVersion"]! as AnyObject).intValue as NSNumber 

     do { // Save object to database and clean up memory 
      try context.save() 
      context.refresh(jobPackageVersion, mergeChanges: false) 
     } catch let error as NSError { Logger.sharedInstance.logMessage("\(#function) JobPackageVersion Saving Error: \(error.userInfo)") } 
     } // for-loop 

     Logger.sharedInstance.logMessage("\(#function): Loaded \(csv.keyedRows!.count) tblJobPackageVersion records.") 
    } else { Logger.sharedInstance.logMessage("\(#function) CSV Parser Warning: no CSV data was parsed in tblJobPackageVersion.csv!") } 
    } catch { Logger.sharedInstance.logMessage("\(#function) Error reading contents of tblJobPackageVersion.csv.") } 
} else { Logger.sharedInstance.logMessage("\(#function) Error locating URL for resource tblJobPackageVersion.csv") } 
} 

任何幫助,將不勝感激。

謝謝。

回答

2

您正試圖對AnyObject類型的對象調用intValue。由於錯誤狀態,這太模糊了,因爲NSNumberNSString都具有intValue屬性。 Xcode不知道要使用哪個intValue,因爲NSNumberNSString屬於AnyObject保護傘。由於Xcode很混亂,你需要更具體的關於你的對象是什麼類型。嘗試是這樣的:

jobPackageVersion.intJobPackageId = (JobPackageVersionDictionary["intJobPackageId"]! as NSNumber).intValue 

注1:你可能要去跟你打電話intValue對其他對象得到了同樣的錯誤,但你可以相應地解決這些問題。

注意2:要非常小心地使用!解開物體的力量。如果你使用的字典返回零,你的程序將崩潰。相反,我會根據您的使用情況安全地使用if letguard聲明對其進行解包。像這樣的東西可能工作好一點:

guard let intJobPackageId = JobPackageVersionDictionary["intJobPackageId"] as? NSNumber, 
     let intJobPackageVersionId = JobPackageVersionDictionary["intJobPackageVersionId"] as? NSNumber, 
     let intStatus = JobPackageVersionDictionary["intStatus"] as? NSNumber, 
     let intVersion = JobPackageVersionDictionary["intVersion"] as? NSNumber 
else { 
    print("one of the dictionary values is nil") 
    return 
} 

jobPackageVersion.intJobPackageId = intJobPackageId.intValue 
jobPackageVersion.intJobPackageVersionId = intJobPackageVersionId.intValue 
jobPackageVersion.intStatus = intStatus.intValue 
jobPackageVersion.intVersion = intVersion.intValue 

這可能不是你想要什麼,但它應該給你如何安全地解開你的對象,使您的應用程序不會崩潰的想法。你可以玩弄它,並決定什麼是最適合你的。