我最近更新为Xcode 9.3,并使用它Swift 4.1。
自从更新以来,我现在看到的文本'some‘in from of class属性和string属性(参见下面的示例):
示例json字符串: some({"email":"test@test.com","password":"password","deviceID":"00000000000:0000000000000000000000000","userid":"00000000-0000-0000-0000-000000000000","username":"test"})
注意到开头的吗?
另一个例子是:
我有一个简单的用户对象:
代码:
class UserBasic: Codable{
let deviceID: String!
let email: String!
let password: String!
let userid: String!
let username: String!
init(deviceID: String, email: String, password: String, userid: String, username: String) {
self.deviceID = deviceID
self.email = email
self.password = password
self.userid = userid
self.username = username
}
}当我实例化并遍历这些属性时,我现在得到如下信息:
Attr 0: deviceID =some(“00000000000:00000000000000000000000”) Attr 1: email = some("test@test.com") Attr 2:密码=一些(“密码”) Attr 3:用户标识=一些(“00000000-0000-0000-0000-000000000000”) Attr 4:用户名= some("test") 再次注意在值的开头处的文本?!?
这是从用Xcode 9.3更新到Swift 4.1之后开始的。
它搞砸了api调用等,就像现在我已经绑定了一些,例如,json编码。
(更新)这里是我的用户obj和迭代代码:
let userObj = Utility.createUserObj(email: email!, password: password!)
let mirrored_object = Mirror(reflecting: userObj)
for (index, attr) in mirrored_object.children.enumerated() {
if let property_name = attr.label as String! {
print("Attr \(index): \(property_name) = \(attr.value)")
}
}更新2:
这是上面生成json示例的代码:
let userObj = Utility.createUserObj(email: email!, password: password!)
let jsonEncoder = JSONEncoder()
let jsonData = try! jsonEncoder.encode(userObj)
let json: NSString! = NSString(data: jsonData, encoding: String.Encoding.utf8.rawValue)发布于 2018-04-02 17:39:01
要解决问题,以这种方式创建JSON字符串,隐式解包装可选选项是不合适的。
do {
let jsonData = try jsonEncoder.encode(userObj)
let json = String(data: jsonData, encoding: .utf8)!
} catch { print(error) }如果JSON的编码成功,json就不能是nil。
https://stackoverflow.com/questions/49615433
复制相似问题