2016-11-08 87 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 

这可能不是你想要什么,但它应该给你如何安全地解开你的对象,使您的应用程序不会崩溃的想法。你可以玩弄它,并决定什么是最适合你的。