你能在URLQueryItems中发送除字符串以外的对象吗?

时间:2017-04-11 00:25:20

标签: swift swift3 imessage-extension

好的,我正在构建一个iMessage应用程序并来回传输数据我必须使用URLQueryItem s。我正在使用SKScene并需要转移IntCGPoint,图片等。阅读Apple的文档和我自己的尝试似乎只能存储{{{ 1}}秒。

由于这是我们来回传递数据的唯一方法,是否有(更好的)方法来存储其他类型的数据?目前我一直这样做:

URLQueryItem

然后在另一方面,我必须再次将此字符串转换回 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执行此操作效率不高..如何在CGPoint中传递CGPoint之类的内容?除了将x和y值存储为字符串之外的其他任何方式?

编辑:这就是我从其他人那里接收数据并进入他们的场景的方式:

URLQueryItem

2 个答案:

答案 0 :(得分:3)

正如您所发现的,要通过URLQueryItem传递数据,您必须将所有内容转换为String,因为信息应该在所有内容后表示为URL :) {{1} }信息,您可以将x和y值分开并将它们作为两个单独的CGPoint转换为String发送。或者,您可以将其作为单个字符串值以“10,5”的形式发送,其中10是x,5是y值,但在另一端,您需要先在逗号上拆分值然后转换结果值返回Int s,类似这样(在另一端):

Int

对于其他类型的数据,您必须遵循类似的策略,以某种方式将值转换为let arr = cgPointValue.components(separatedBy:",") let x = Int(arr[0]) let y = Int(arr[1]) 。对于图像,如果您的资源中包含图像,则应该能够通过仅传递名称或标识号来逃避。对于外部图像,URL(或图像全部来自同一服务器的一部分)应该起作用。否则,如果使用String,您可能必须查看base64对图像数据的编码,但是如果你到了那一点,你可能想看一下你想要实现的目标,如果有更好的话这样做的方法,因为大图像可能导致大量数据被发送,我不确定iMessage应用程序是否支持这一点。因此,您可能希望了解iMessage应用程序数据传递中的限制。

希望这会有所帮助:)

答案 1 :(得分:0)

您可以使用iMessageDataKit库在MSMessage个对象中存储键值对。它使设置和获取数据变得非常简单和直接,如:

let message: MSMessage = MSMessage()

message.md.set(value: 7, forKey: "moveCount")
message.md.set(value: "john", forKey: "username")
message.md.set(values: [15.2, 70.1], forKey: "startPoint")
message.md.set(values: [20, 20], forKey: "boxSize")

if let moveCount = message.md.integer(forKey: "moveCount") {
    print(moveCount)
}
if let username = message.md.string(forKey: "username") {
    print(username)
}
if let startPoint = message.md.values(forKey: "startPoint") {
    print("x: \(startPoint[0])")
    print("y: \(startPoint[1])")
}
if let boxSize = message.md.values(forKey: "boxSize") {
  let size = CGSize(width: CGFloat(boxSize[0] as? Float ?? 0),
                    height: CGFloat(boxSize[1] as? Float ?? 0))
  print("box size: \(size)")
}

(免责声明:我是iMessageDataKit的作者)