【问题标题】:Cannot convert value of type 'Int' to expected argument type 'String'?无法将“Int”类型的值转换为预期的参数类型“String”?
【发布时间】:2018-10-01 21:20:59
【问题描述】:

我正在保存所有数据,并且代码是在单独的类中编写的。它显示一个错误,即无法将“Int”类型的值转换为预期的参数类型“String”。请帮我解决这个问题。

以下是我保存所有数据的类:

class FetchedLocations
{
    var id: Int
    var companyID: Int
    var username: String
    var name: String
    var imei: String
    var created_at: String
    var updated_at: String
    var module_id: Int
    var location_address: String?
    var guard_name: String?
    var guard_contact: String?
    var device: Int?
    var expire_on: Int?
    var status: Int

    init(id: Int, companyID: Int, username: String, name: String, imei: String, created_at: String, updated_at: String, module_id: Int, location_address: String, guard_name: String, guard_contact: String, device: Int, expire_on: Int, status: Int) {

        self.id = id
        self.companyID = companyID
        self.username = username
        self.name = name
        self.imei = imei
        self.created_at = created_at
        self.updated_at = updated_at
        self.module_id = module_id
        self.location_address = location_address
        self.guard_name = guard_name
        self.guard_contact = guard_contact
        self.device = device
        self.expire_on = expire_on
        self.status = status
    }
}

这是 ViewController.swift 文件:

for eachDepartment in json["locations"]! {
    let eachData = eachDepartment as! [String: Any]
    let id = eachData["id"] as! Int
    let companyID = eachData["company_id"] as! Int
    let username = eachData["username"] as! String
    let locName = eachData["name"] as! String
    let imei = eachData["imei"] as! String
    let createdDate = eachData["created_at"] as! String
    let updatedDate = eachData["updated_at"] as! String
    let moduleID = eachData["module_id"] as! Int
    let locationAddress = eachData["location_address"] as! String
    let guardName = eachData["guard_name"] as! String
    let guardContact = eachData["guard_contact"] as! String
    //let device = eachData["device"] as! Int
    let device = 0
    //let expireOn = eachData["expire_on"] as! Int
    let expireOn = 0
    //let status = eachData["status"] as! Int
    let status = eachData["status"] as! Int

    Date.formatter(createdDate: createdDate)

    //Error encountered in this line//
    FetchedLocations.init(id: id, companyID: companyID, username: username, name: locName, imei: imei, created_at: createdDate, updated_at: updatedDate, module_id: moduleID, location_address: locationAddress, guard_name: guardName, guard_contact: guardContact, device: device, expire_on: expireOn, status: status)

}

遇到错误:

无法将“Int”类型的值转换为预期的参数类型“String”

【问题讨论】:

  • 错误很明显:其中一个值(实际上)是Int而不是String。设置断点并使用调试器。在 Swift 4 中使用Codable 协议。它的错误信息仍然更有意义。
  • 这部分代码完全没问题,没有问题,请检查其余代码
  • 大多数时候使用as! 是危险的。使用guard let eachData = eachDepartment as? [String: Any], ... else { continue } 避免崩溃。显然,您仍然需要找到这些 as! Int 行中的哪一行是 as! String

标签: ios swift


【解决方案1】:
【解决方案2】:

只需使用另一个变量。

例如,试试:

let stringFromIntToString = String(yourIntVariable)

应该可以正常工作。

【讨论】:

    猜你喜欢
    • 2017-01-09
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 2016-01-14
    • 2019-05-12
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    相关资源
    最近更新 更多