QT开发:如何声明一个int型数组?且做到以下条件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT开发:如何声明一个int型数组?且做到以下条件相关的知识,希望对你有一定的参考价值。
我起了一个QTimer在里面不停的产生随机数,然后再存入声明的int型数组中,一次只能存7个,若产生了第8个随机数自动替换掉数组中第一个数,以此类推,这该怎么做?
参考技术A 这和Qt关系不大,就是C++呗在 Realm Swift 中声明一个 Int 数组
【中文标题】在 Realm Swift 中声明一个 Int 数组【英文标题】:Declare an array of Int in Realm Swift 【发布时间】:2016-05-15 21:58:30 【问题描述】:如何在RLMObject
中声明整数数组?
喜欢:
dynamic var key:[Int]?
给出以下错误:
Terminating app due to uncaught exception 'RLMException', reason: ''NSArray' is not supported as an RLMObject property. All properties must be primitives, NSString, NSDate, NSData, RLMArray, or subclasses of RLMObject. See https://realm.io/docs/objc/latest/api/Classes/RLMObject.html for more information.'
【问题讨论】:
【参考方案1】:幸运的是,Realm 3.0 及更高版本现在支持原始类型数组。 (2017 年 10 月 31 日)
您现在可以直接在 RLMArrays 或 Lists 中存储原始类型或其可为空的对应物(更具体地说:布尔、整数和浮点数类型、字符串、日期和数据)。如果要定义此类原始值的列表,则不再需要定义繁琐的单字段包装器对象。相反,您可以只存储原始值本身!
class MyObject : Object
@objc dynamic var myString: String = ""
let myIntArray = List<Int>()
来源:https://realm.io/blog/realm-cocoa-reaches-3-0/
【讨论】:
不管怎样,如果你选择使用List
这样的 Primitives,你将无法使用 @count
谓词样式过滤 Results
,因为它不受支持List
s of Primitives 。也就是说,将它们包装在 Realm 对象中有其自身的缺点......来自docs.mongodb.com/realm/sdk/ios/examples/filter-data:“评估给定集合中的对象数量。目前仅支持对多关系集合而不支持原语列表。为了在原语列表上使用@count
,请考虑将原语包装在 Realm 对象中。”【参考方案2】:
接受的报价在内存方面非常昂贵。 您可能会得到一个包含非常大“n”个对象的列表。
这不是对与错的问题,但我认为在这里写一个不同的解决方法很好。
另一种方法: 我决定使用单个字符串来表示一个 Int 数组。
在我的 Realm 类中,我定义了一个变量:
dynamic var arrInt: String? = nil
而且非常容易使用:
let arrToSave = [0, 1, 33, 12232, 394]
<MY_CUSTOM_REALM_CLASS>.arrInt = arrToSave.map String(describing: $0) .joined(separator: ",")
还有回来的路:
let strFetched = <MY_CUSTOM_REALM_CLASS>.arrInt
let intArray = strFetched.components(separatedBy: ",").flatMap Int($0)
很高兴听到您的反馈,因为我认为这种方法更好。
【讨论】:
为什么投反对票?我将此答案作为对我有用的提案提出,如果您不喜欢此解决方案,请分享您的想法,不要只是投反对票。 使用description
是一个非常非常糟糕的主意。使用这个:到:let stringOfArray = arrToSave.map String(describing: $0) .joined(separator: ",")
。来自:let intArray = stringOfArray.components(separatedBy: ",").flatMap Int($0)
【参考方案3】:
不幸的是,还不支持原语列表。有问题#1120 跟踪添加对此的支持。您会发现一些想法,您可以如何解决当前的问题。
最简单的解决方法是创建一个对象来保存 int 值。然后模型就拥有了一个List对象。
class Foo: Object
let integerList = List<IntObject>() // Workaround
class IntObject: Object
dynamic var value = 0
【讨论】:
Realm 居然不支持这么简单的东西,真是不可思议。 支持还没有实现吗? 还没有。但是Realm核心团队现在正在努力。很快就会得到支持。 现在好像支持了,从 v3.0.0-beta.4 github.com/realm/realm-cocoa/releases/tag/v3.0.0-beta.4 @KimiChiuList<Int>
应该从 v3.0 开始工作 realm.io/blog/realm-cocoa-reaches-3-0 可能你错了。【参考方案4】:
正如错误消息所述,您必须使用 RLMArray
- 或者更确切地说,它是 swift 等效的 List
。
见:Realm docs
【讨论】:
以上是关于QT开发:如何声明一个int型数组?且做到以下条件的主要内容,如果未能解决你的问题,请参考以下文章