Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 斯威夫特,如何将字典拆分为60kb的块?_Ios_Swift_Watchkit - Fatal编程技术网

Ios 斯威夫特,如何将字典拆分为60kb的块?

Ios 斯威夫特,如何将字典拆分为60kb的块?,ios,swift,watchkit,Ios,Swift,Watchkit,我正在尝试将一本大词典拆分为更小的60kb块。我该怎么做 我尝试这样做的原因是为了在iOS和watchOS之间传输时,通过65.5kb的用户信息传输限制。我可以在磁盘上写一个文件来解决这个问题,但在这种情况下有点复杂,因为我发送了很多数据 我的字典是这样的: data[“sessionLog”] 键sessionLog包含所有我的值 样本数据: “lat”:000000000000, “长”:00000000000, “名称”:“adfdsfs”, “位置”:“asdfasdfadsf”, “速

我正在尝试将一本大词典拆分为更小的60kb块。我该怎么做

我尝试这样做的原因是为了在iOS和watchOS之间传输时,通过65.5kb的用户信息传输限制。我可以在磁盘上写一个文件来解决这个问题,但在这种情况下有点复杂,因为我发送了很多数据

我的字典是这样的:

data[“sessionLog”]

sessionLog
包含所有我的值

样本数据:

“lat”:000000000000,
“长”:00000000000,
“名称”:“adfdsfs”,
“位置”:“asdfasdfadsf”,

“速度”:65

假设一项数据(假设您有一个巨大的数组)如下所示:

"lat": 000000000000,
"long": 00000000000,
"name": "adfdsfs",
"location": "asdfasdfadsf",
"speed": 65
如果将
lat
long
存储在
Double
变量中,将
name
location
存储在
String
中,并将
speed
存储在
Int
变量中,则可以对每个项目执行以下操作:

let lenName = name.lengthOfBytes(using:String.Encoding.utf8)
let lenLoc = location.lengthOfBytes(using:String.Encoding.utf8)
let total = lenName + lenLoc + MemoryLayout<Int>.size + (MemoryLayout<Double>.size * 2)
让lenName=name.lengthOfBytes(使用:String.Encoding.utf8)
让lenLoc=location.lengthOfBytes(使用:String.Encoding.utf8)
让total=lenName+lenLoc+MemoryLayout.size+(MemoryLayout.size*2)
然后,当然,你必须循环浏览这些项目,直到你到达接近你所寻找的极限的某个地方。但请注意,如果字符串值使用UTF8编码,则会提供此选项。因此,如果使用不同的编码,值将发生变化


但是,如果有一个数据项(假设您有一个巨大的数组)看起来像这样,那么希望这会给您一些可以使用的东西:)

"lat": 000000000000,
"long": 00000000000,
"name": "adfdsfs",
"location": "asdfasdfadsf",
"speed": 65
如果将
lat
long
存储在
Double
变量中,将
name
location
存储在
String
中,并将
speed
存储在
Int
变量中,则可以对每个项目执行以下操作:

let lenName = name.lengthOfBytes(using:String.Encoding.utf8)
let lenLoc = location.lengthOfBytes(using:String.Encoding.utf8)
let total = lenName + lenLoc + MemoryLayout<Int>.size + (MemoryLayout<Double>.size * 2)
让lenName=name.lengthOfBytes(使用:String.Encoding.utf8)
让lenLoc=location.lengthOfBytes(使用:String.Encoding.utf8)
让total=lenName+lenLoc+MemoryLayout.size+(MemoryLayout.size*2)
然后,当然,你必须循环浏览这些项目,直到你到达接近你所寻找的极限的某个地方。但请注意,如果字符串值使用UTF8编码,则会提供此选项。因此,如果使用不同的编码,值将发生变化


但希望这能给你一些你可以使用的东西:)

你的值都是一种类型的字符串吗?或者你有不同类型的混合数据吗?不,它们都是混合的。你能提供一些样本数据吗?我可以给你一个基本的方法,但我不能确定它是否能正常工作,如果不知道数据是什么样子的:)@Fahim cool,请参阅更新的示例数据。它基本上只是GPS数据,所以字符串、双精度和整数。你的值都是一种类型的字符串吗?或者你有不同类型的混合数据吗?不,它们都是混合的。你能提供一些样本数据吗?我可以给你一个基本的方法,但我不能确定它是否能正常工作,如果不知道数据是什么样子的:)@Fahim cool,请参阅更新的示例数据。它基本上只是GPS数据,所以字符串、双精度和整数。好的,谢谢。但这是一个愚蠢的问题,我如何将我的字典中的块复制到另一个中?一个字典可能会被证明是一个拆分问题,因为它将是一个大的键和值集。但是,如果
sessionLog
属性包含一个数组,那么您可以获取该数组,然后沿着以下几行将数组拆分:let start=arr.startIndex let end=start.advanced(by:3)let sub=arr[start…end]好的,谢谢。但这是一个愚蠢的问题,我如何将我的字典中的块复制到另一个中?一个字典可能会被证明是一个拆分问题,因为它将是一个大的键和值集。但是,如果
sessionLog
属性包含一个数组,则可以获取该数组,然后沿以下行拆分该数组:let start=arr.startIndex let end=start.advanced(by:3)let sub=arr[start…end]