GVKun编程网logo

如何在SWIFT的IOS CORE-DATA请求中使用SQL GROUP BY和SUM函数?

19

在本文中,您将会了解到关于如何在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函数?

如何在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不是关系数据库,因此您应该考虑的实体不是“表”,而对象不是“记录”。还要注意,按照惯例,属性名称不应以大写字母开头。也就是说,可以构造访存来实现所需的功能。关键步骤是:

  1. 创建一个提取请求
  2. 指定一个NSPredicate根据您选择的条件进行过滤
  3. 设置resultType.DictionaryResultType(“分组依据”所必需)
  4. 设置要包含在提取中的属性(要获取sum(),这涉及创建NSExpressionNSExpressionDescription)。
  5. 设置属性分组
  6. NSSortDescriptor按名称创建按顺序排序,降序
  7. 执行提取

请参见以下代码:

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

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 Superpowered

Bridging-Header-File包含了我想在我的Swift代码中使用的lib方法的原型(我不喜欢这个,但如果它是唯一的方法……).

ViewController file

viewController文件,其中Swift中的代码是,我可以创建一个Superpowered对象,感谢Bridging-Header-File,并调用我放入它的方法.

.mm file

和wtf我甚至不明白为什么这个Objective-C文件在这里以及它包含什么.它无处不在,甚至不是他们的lib文件.

因此,考虑到这个示例项目,我创建了自己的项目,这里有一些截图:

Briging-Header-File

同样的Bridging-Header-File在示例项目中除了我包含SuperpoweredioSAudioIO.h之外,所以我可以使用SuperpoweredioSAudioIODelegate.

viewController

我的viewController文件,其中Swift中的代码是,我可以创建一个Superpowered对象感谢Bridging-Header-File,并调用我放入它的方法.

直到这里,它是伟大的,除了我不能例证创建一个SuperpoweredRecorder对象.如果我尝试在我的Bridging-Header-File中包含SuperpoweredRecorder.h文件,我会遇到以下错误:

errors

所以我看到它是因为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对象的示例:

SuperpoweredRecorderWrapped.h

在这里,我创建了一个.h文件,其中我使用名称SuperpoweredRecorderWrapped对我的包装器进行原型设计,并且我还在原型中使用了我想要使用的lib的SuperpoweredRecorder的所有方法.

SuperpoweredRecorderWrapped.mm

然后我创建一个新的.m文件,我重命名.mm并在其上实现SuperpoweredRecorderWrapped.
我导入SuperpoweredRecorderWrapped.h和SuperpoweredRecorder.h.
我创建一个SuperpoweredRecorder对象作为名为_wrapped的属性,在我的方法中,我调用_wrapped对象的相应方法.
有了这个,当我在Swift代码中调用SuperpoweredRecorderWrapped的开始时,这个将调用_wrapped的一个SuperpoweredRecorder对象的start.看到诀窍?

Bridge-Header

最后,我将所有包装的类包含在我的Bridging-Header中,就像我可以从Swift实例化我的包装对象一样.

注意:所有C代码都必须在.mm文件中,这就是为什么我在.mm文件中创建包含C代码的.h的#include而不是我的.h文件.

groupby和count如何在sql中工作

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 Swift – 如何使用Core Data存储数组?

我是iOS开发的新手,想要知道我应该指定哪种数据类型来存储多个字符串(数组).该应用程序与食物有关,我需要将多种成分存储为一个属性.

我当时正在考虑将原料作为实体,但我只是想让原料变得容易.
我已阅读有关可转换类型但人们似乎并不建议使用它来存储数组.

解决方法

警告:提前见解答.

你没有.

将数据存储在数组中并不会使您更容易.相反,它会让事情变得更加困难一小时.想象一下,你想要显示包含所选成分的所有食谱.对于你的阵列黑客来说这并不容易,只要有一行代码就可以使用合适的模型.

我建议使用与“加入实体”的良好旧关系.

是的,这比黑客攻击的东西更复杂,几乎没有用.但这是正确的方法.

ios – .enumerateGroupsWithTypes阻止停止参数Swift(Xcode 6 beta 5)

ios – .enumerateGroupsWithTypes阻止停止参数Swift(Xcode 6 beta 5)

今天我将 Xcode 6升级到beta 5(来自beta 1),你可以想象我发现我之前完美运行的 Swift应用程序充满了各种错误(好吧,从beta 1有很多变化).在所有错误中,有一个我无法弄清楚如何修复.它与swift闭包有关,特别是.enumerateGroupsWithTypes方法的enumerationBlock参数.这是代码:

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)

    })

解决方法

NSLog(“错误!”,nil)错误,应该是NSLog(“错误!”). (这似乎混淆了Swift编译器并导致无关的错误消息.)

今天关于如何在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)等更多相关知识的信息可以在本站进行查询。

本文标签: