在本文中,您将会了解到关于如何在SWIFT的IOSCORE-DATA请求中使用SQLGROUPBY和SUM函数?的新资讯,并给出一些关于c–如何在Swift项目中使用Superpoweredlib、g
在本文中,您将会了解到关于如何在SWIFT的IOS CORE-DATA请求中使用SQL GROUP BY和SUM函数?的新资讯,并给出一些关于c – 如何在Swift项目中使用Superpowered lib、groupby和count如何在sql中工作、iOS Swift – 如何使用Core Data存储数组?、ios – .enumerateGroupsWithTypes阻止停止参数Swift(Xcode 6 beta 5)的实用技巧。
本文目录一览:- 如何在SWIFT的IOS CORE-DATA请求中使用SQL GROUP BY和SUM函数?
- c – 如何在Swift项目中使用Superpowered lib
- groupby和count如何在sql中工作
- iOS Swift – 如何使用Core Data存储数组?
- ios – .enumerateGroupsWithTypes阻止停止参数Swift(Xcode 6 beta 5)
如何在SWIFT的IOS CORE-DATA请求中使用SQL GROUP BY和SUM函数?
我有一个表(Transactions),其中包含包含Account_name和交易金额的记录。我想计算每个帐户的所有交易的总数,这些交易以“私人”开头且交易金额>1000。我想按名称降序排列这些帐户。
因此,SQL请求将如下所示:
SELECT Account_name, SUM(Amount) FROM Transactions WHERE Account_name like ''Private%'' and Amount > 1000 GROUP BY Account_name ORDER BY Account_name DESC
我将如何在Swift中使用Core-DATA做到这一点。
谢谢
答案1
小编典典请记住,CoreData不是关系数据库,因此您应该考虑的实体不是“表”,而对象不是“记录”。还要注意,按照惯例,属性名称不应以大写字母开头。也就是说,可以构造访存来实现所需的功能。关键步骤是:
- 创建一个提取请求
- 指定一个
NSPredicate
根据您选择的条件进行过滤 - 设置
resultType
为.DictionaryResultType
(“分组依据”所必需) - 设置要包含在提取中的属性(要获取sum(),这涉及创建
NSExpression
和NSExpressionDescription
)。 - 设置属性分组
NSSortDescriptor
按名称创建按顺序排序,降序- 执行提取
请参见以下代码:
let fetch = NSFetchRequest(entityName: "Transaction")let predicate = NSPredicate(format: "Account_name like %@ AND Amount > %@", "Private*",NSNumber(double: 1000.0))fetch.predicate = predicatefetch.resultType = .DictionaryResultTypelet sumExpression = NSExpression(format: "sum:(Amount)")let sumED = NSExpressionDescription()sumED.expression = sumExpressionsumED.name = "sumOfAmount"sumED.expressionResultType = .DoubleAttributeTypefetch.propertiesToFetch = ["Account_name", sumED]fetch.propertiesToGroupBy = ["Account_name"]let sort = NSSortDescriptor(key: "Account_name", ascending: false)fetch.sortDescriptors = [sort]let results = managedObjectContext?.executeFetchRequest(fetch, error: nil) as NSArray?
结果将是带有键“ Account_name”和“ sumOfAmount”的字典数组。
编辑 要提取特定Account_name的值,请使用另一个谓词:
let newPredicate = NSPredicate(format: "Account_name like %@", "toto")! if let resultsArray = results { // to unwrap the optional let filteredResults = resultsArray.filteredArrayUsingPredicate(newPredicate) let sumOfAmount = (filteredResults[0] as NSDictionary)["sumOfAmount"] as Double }
我忽略了前面的示例过滤Account_name
到以“ Private”开头的那些事实,并假设您将拥有一个(只有一个)名称为“
toto”的帐户(因此filteredResults[0]
);您的生产代码应检查。
c – 如何在Swift项目中使用Superpowered lib
我想在Swift中制作一个应用程序,只需通过iPhone的麦克风录制,然后播放录制的声音.
为此,我想使用lib Superpowered这是一个带头文件的静态库.
为此,我尝试在项目中拖放.a和头文件(Xcode为我创建一个桥接头文件),在Xcode>中的“链接框架和库”中添加.a.目标>一般(在Xcode>目标>构建阶段>“链接二进制与库”)并索引Xcode中的.h文件路径>目标>构建设置>搜索路径>图书馆搜索路径.
但有了这个我有错误“ld:符号(s)找不到架构arm64”
与XCode: Undefined symbols for architecture arm64 error完全相同,我尝试了我在网上找到的所有解决方案,仍无法编译.
所以!
Superpowered为我们提供了一个示例应用程序,以展示如何混合Objective-C并在Swift项目中使用它们的lib(如果你想要https://github.com/superpoweredSDK/Low-Latency-Android-Audio-iOS-Audio-Engine,这里是git的链接).
以下是示例项目的一些屏幕截图,其中包含我理解的内容以及我不了解的内容:
Bridging-Header-File包含了我想在我的Swift代码中使用的lib方法的原型(我不喜欢这个,但如果它是唯一的方法……).
viewController文件,其中Swift中的代码是,我可以创建一个Superpowered对象,感谢Bridging-Header-File,并调用我放入它的方法.
和wtf我甚至不明白为什么这个Objective-C文件在这里以及它包含什么.它无处不在,甚至不是他们的lib文件.
因此,考虑到这个示例项目,我创建了自己的项目,这里有一些截图:
同样的Bridging-Header-File在示例项目中除了我包含SuperpoweredioSAudioIO.h之外,所以我可以使用SuperpoweredioSAudioIODelegate.
我的viewController文件,其中Swift中的代码是,我可以创建一个Superpowered对象感谢Bridging-Header-File,并调用我放入它的方法.
直到这里,它是伟大的,除了我不能例证创建一个SuperpoweredRecorder对象.如果我尝试在我的Bridging-Header-File中包含SuperpoweredRecorder.h文件,我会遇到以下错误:
所以我看到它是因为SuperpoweredRecorder.h包含一些.cpp文件而且我必须为cpp创建一个包装器(有点像我使用桥接头,没有?)但是包括.h和.mm文件而且我不知道我要把那个.mm文件放进去(SuperpoweredRecorder.cpp的代码?但是我无法访问它)
所以,是的,我对所有这些东西有点困惑,你能帮我理解如何在Swift项目中使用所有Superpowered lib吗?
解决方法:
正如我在评论@OmniProg时所说,我与Superpowered的首席技术官进行了一些对话,帮助我找到了下面的解决方案.
因此,由于Swift不能直接与C交互,但可以使用Objective-C,我不得不在Objective-C(.mm文件,C和Objective-C之间的混合)中创建对象,这些对象包含了lib Superpowered的C类.
以下是来自lib的SuperpoweredRecorder对象的示例:
在这里,我创建了一个.h文件,其中我使用名称SuperpoweredRecorderWrapped对我的包装器进行原型设计,并且我还在原型中使用了我想要使用的lib的SuperpoweredRecorder的所有方法.
然后我创建一个新的.m文件,我重命名.mm并在其上实现SuperpoweredRecorderWrapped.
我导入SuperpoweredRecorderWrapped.h和SuperpoweredRecorder.h.
我创建一个SuperpoweredRecorder对象作为名为_wrapped的属性,在我的方法中,我调用_wrapped对象的相应方法.
有了这个,当我在Swift代码中调用SuperpoweredRecorderWrapped的开始时,这个将调用_wrapped的一个SuperpoweredRecorder对象的start.看到诀窍?
最后,我将所有包装的类包含在我的Bridging-Header中,就像我可以从Swift实例化我的包装对象一样.
注意:所有C代码都必须在.mm文件中,这就是为什么我在.mm文件中创建包含C代码的.h的#include而不是我的.h文件.
groupby和count如何在sql中工作
1> select browser,count(*) from logtest group by browser;
+-----------+----------+
| browser | count(*) |
+-----------+----------+
| Firefox 3 | 14 |
| Unknown | 11 |
+-----------+----------+
套装2排
2> select browser,count(browser) from logtest group by browser;
+-----------+----------------+
| browser | count(browser) |
+-----------+----------------+
| Firefox 3 | 14 |
| Unknown | 11 |
+-----------+----------------+
套装2排
3> select browser,count(browser) from logtest;
+-----------+----------------+
| browser | count(browser) |
+-----------+----------------+
| Firefox 3 | 25 |
+-----------+----------------+
一组1行
为什么查询方式1>和2>会得到相同的结果?count(*)和count(somefiled)之间没有什么区别?
另外,查询2>和3>导致的结果不同,为什么 groupby 如此神奇?它是如何工作的?
更新:我正在使用MySQL5.1。:)
iOS Swift – 如何使用Core Data存储数组?
我当时正在考虑将原料作为实体,但我只是想让原料变得容易.
我已阅读有关可转换类型但人们似乎并不建议使用它来存储数组.
解决方法
你没有.
将数据存储在数组中并不会使您更容易.相反,它会让事情变得更加困难一小时.想象一下,你想要显示包含所选成分的所有食谱.对于你的阵列黑客来说这并不容易,只要有一行代码就可以使用合适的模型.
我建议使用与“加入实体”的良好旧关系.
是的,这比黑客攻击的东西更复杂,几乎没有用.但这是正确的方法.
ios – .enumerateGroupsWithTypes阻止停止参数Swift(Xcode 6 beta 5)
assetLib.enumerateGroupsWithTypes(ALAssetsGroupType(ALAssetsGroupSavedPhotos),usingBlock: { (group: ALAssetsGroup?,stop: CMutablePointer<ObjCBool>) in ... },failureBlock: { (error: NSError!) in ... })
这确实在Swift(Xcode 6 beta 1)中完美运行.但现在,我得到2个错误:
>
” ‘UnsafeMutablePointer’ is not a subtype of ‘error type’ “
>
” Use of undeclared type ‘CMutablePointer’ “
很明显,CMutablePointer不再存在,所以我试图修改stop参数,如:
...,stop: UnsafeMutablePointer<ObjCBool> ...
在这个改变之后,第二个错误显然消失了,但第一个转变为:
” Could not find an overload for ‘init’ that accepts the supplied arguments “
我甚至尝试将UnsafeMutablePointer更改为UnsafePointer,如this post所示.
编辑:
以下是enumerateGroupsWithTypes方法的完整代码:
assetLib.enumerateGroupsWithTypes(ALAssetsGroupType(ALAssetsGroupSavedPhotos),usingBlock: { (group: ALAssetsGroup?,stop: UnsafeMutablePointer<ObjCBool>) in if group != nil { group!.setAssetsFilter(ALAssetsFilter.allPhotos()) group!.enumerateAssetsAtIndexes(NSIndexSet(index: group!.numberOfAssets()-1),options: nil,usingBlock: { (result: ALAsset!,index: Int,stop: UnsafeMutablePointer<ObjCBool>) in if result { var alAssetRapresentation: ALAssetRepresentation = result.defaultRepresentation() url = alAssetRapresentation.url() } }) } else if group == nil { assetLib.assetForURL(url,resultBlock: { (asset: ALAsset!) in if asset != nil { var assetRep: ALAssetRepresentation = asset.defaultRepresentation() var iref = assetRep.fullResolutionImage().takeUnretainedValue() var image = UIImage(CGImage: iref) imageView.image = image self.view.addSubview(imageView) let mask = CAShapeLayer() mask.path = UIBezierPath(ovalInRect: CGRectMake(0,200,200)).CGPath mask.frame = CGPathGetPathBoundingBox(mask.path) mapView.layer.mask = mask self.view.addSubview(mapView) } },failureBlock: { (error: NSError!) in NSLog("Error!",nil) }) } },failureBlock: { (error: NSError!) in NSLog("Error!",nil) })
解决方法
今天关于如何在SWIFT的IOS CORE-DATA请求中使用SQL GROUP BY和SUM函数?的介绍到此结束,谢谢您的阅读,有关c – 如何在Swift项目中使用Superpowered lib、groupby和count如何在sql中工作、iOS Swift – 如何使用Core Data存储数组?、ios – .enumerateGroupsWithTypes阻止停止参数Swift(Xcode 6 beta 5)等更多相关知识的信息可以在本站进行查询。
本文标签: