删除可选的字符串表单字典



我需要将一些参数传递给Web服务,但可选参数也随之而来

if let birthYear = objPet?.birthYear {
        petDict = ["name": (objPet!.name!),
                   "birth_year": birthYear,
                   "gender": 1,
                   "breed": "test"]
    }

宠物词典控制台

{
    "birth_year" = "Optional("2000")";
    breed = test;
    gender = 1;
    name = 2323;
}

我想要"birth_year"="2000"。我该怎么做。

class Pet: NSObject {
    var name : String?
    var birthYear : String?
    var birthMonth : String?
    var gender : String?
    var breed : String?
}

你的问题不在于你如何解开birthYear。 您的问题是存储在 Pet 对象中的 birthYear 属性的String实际上是"Optional(2000)" .

您在错误的地方寻找问题的根源。 首先,您需要查看创建Pet对象的代码。

我做了以下操作来在游乐场中重现您的问题:

class Pet: NSObject {
    var name : String?
    var birthYear : String?
    var birthMonth : String?
    var gender : String?
    var breed : String?
}
let objPet: Pet? = Pet()
objPet?.name = "Fido"
let year: Int? = 2000
objPet?.birthYear = "(year)"   // you have something like this somewhere
if let birthYear = objPet?.birthYear {
    let petDict = ["name": (objPet!.name!),
               "birth_year": birthYear,
               "gender": 1,
               "breed": "test"]
    print(petDict)
}

输出:

{
    "birth_year" = "Optional(2000)";
    breed = test;
    gender = 1;
    name = Fido;
}

如果将objPet?.birthYear = "(year)"更改为 objPet?.birthYear = "(year!)" ,则"Optional"消失。 这表明问题出在对象中存储的String,而不是创建petDict时如何解开该String

将其更改为:

if let pet = objPet {
   if let birthYear = pet.birthYear {
        petDict = ["name": (pet.name!),
                   "birth_year": birthYear,
                   "gender": 1,
                   "breed": "test"]
    }
}

应该有帮助

编辑:您可能也应该安全地打开 pet.name 包装

最新更新