我需要将一些参数传递给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 包装