首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SWIFT4.1类属性和以“some”为前缀的子字符串(Xcode 9.3)

SWIFT4.1类属性和以“some”为前缀的子字符串(Xcode 9.3)
EN

Stack Overflow用户
提问于 2018-04-02 17:02:13
回答 1查看 208关注 0票数 0

我最近更新为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"})

注意到开头的吗?

另一个例子是:

我有一个简单的用户对象:

代码:

代码语言:javascript
复制
    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和迭代代码:

代码语言:javascript
复制
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示例的代码:

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-02 17:39:01

要解决问题,以这种方式创建JSON字符串,隐式解包装可选选项是不合适的。

代码语言:javascript
复制
do {
    let jsonData = try jsonEncoder.encode(userObj)
    let json = String(data: jsonData, encoding: .utf8)!
} catch { print(error) }

如果JSON的编码成功,json就不能是nil

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49615433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档