好的,我正在构建一个iMessage应用程序,为了来回传输数据,我必须使用URLQueryItems。我正在使用SKScene并需要传输Ints、CGPoints、图像等。阅读苹果的文档和我自己的尝试,似乎你只能在URLQueryItems中存储字符串。
因为这是我们来回传递数据的唯一方法,是否有(更好的)方法来存储其他类型的数据?目前我一直在做:

 func composeMessage(theScene: GameScene) {
        let conversation = activeConversation
        let session = conversation?.selectedMessage?.session ?? MSSession()

        let layout = MSMessageTemplateLayout()
        layout.caption = "Hello world!"

        let message = MSMessage(session: session)
        message.layout = layout
        message.summaryText = "Sent Hello World message"

        var components = URLComponents()
        let queryItem = URLQueryItem(name: "score",value: theScene.score.description)
       components.queryItems = [queryItem] //array of queryitems
        message.url = components.url!

        print("SENT:",message.url?.query)

        conversation?.insert(message, completionHandler: nil)
    }

然后在另一方面,我必须再次将这个字符串转换回Int。使用CGPoints执行此操作将效率低下。一个人如何通过一个像CGPoint中的URLQueryItem这样的东西?除了将x和y值存储为字符串之外,还有其他方法吗?
编辑:这是我如何从其他人那里接收数据并将其放入他们的场景:
override func willBecomeActive(with conversation: MSConversation) {
        // Called when the extension is about to move from the inactive to active state.
        // This will happen when the extension is about to present UI.

        // Use this method to configure the extension and restore previously stored state.

        let val = conversation.selectedMessage?.url?.query?.description
         print("GOT IT ", val)

        if(val != nil)
        {
            scene.testTxt = val!
        }
    }

最佳答案

正如您所发现的,要通过URLQueryItem传递数据,您必须将所有内容都转换为Strings,因为信息毕竟应该表示为一个url:)对于CGPoint信息,您可以将x和y值分开,并将它们作为两个单独的Ints发送到转换为字符串。或者,您可以以“10,5”的形式将其作为单个字符串发送,其中10是x,5是y,但在另一端,您需要先将该值拆分为逗号,然后将结果值转换回Ints,如下所示(在另一端):

let arr = cgPointValue.components(separatedBy:",")
let x = Int(arr[0])
let y = Int(arr[1])

对于其他类型的数据,您必须遵循类似的策略,以某种方式将值转换为String。对于图像,如果您的资源中有图像,那么您应该能够只传递名称或标识号。对于外部图像,应该有一个url(如果所有图像都来自同一服务器,则为其中的一部分)。否则,如果您使用URLQueryItem的话,您可能需要查看base64编码图像数据或其他东西,但是如果您到了这一步,您可能需要查看您正在尝试实现的目标,以及是否有更好的方法来实现这一目标,因为大图像可能会导致发送大量数据,我不确定imessage应用程序是否支持这一点。因此,您可能还需要研究imessage应用程序数据传递中的限制。
希望这有帮助:)

关于swift - 您可以在URL QueryItems中发送字符串以外的对象吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43334841/

10-11 04:28