小编Jam*_*mes的帖子

Swift使用可选的存储属性初始化Struct

我是一个Swift新手,我正试图使用​​具有可选属性的Structs.我已经做了很多搜索并得到了一些有效的东西,但它感觉非常低效,所以想知道是否有更好/更易于管理的方式来实现我的目标.

我想使用Structs来代表一家公司,但我事先并不知道任何特定业务可能具有哪些属性组合.这似乎意味着我必须为每个可能的参数组合创建一个init().

这是一个简化的例子(我有更多的属性):

import Foundation

struct Business {
    let name : String
    var web : String?
    var address: String?

    // just the business name
    init(busName: String) {
        self.name = busName
    }

    // business name + website
    init(busName: String, website: String) {
        self.name = busName
        self.web = website
    }

    // business name + address
    init(busName: String, address: String) {
        self.name = busName
        self.address = address
    }

    // business name + website + address
    init(busName: String, website: String, address: String) {
        self.name …
Run Code Online (Sandbox Code Playgroud)

ios swift

37
推荐指数
2
解决办法
2万
查看次数

Swift 过滤嵌套对象数组

我有一组业务对象。每个 Business 对象都包含一组键值对,其中一个元素可以是 ContentBlocks 对象的嵌套数组。

var masterArray = [
        Business(busName: "Dave's Cafe", busId: 1, website: "http://www.davescafe.com", latLong: (45.541, -45.609),
            actions: [["title": "About Us", "contentId": "123", "actionType": "content"],
                ["title": "Website", "url": "http://www.davescafe.com", "actionType": "web"]],
            contentBlocks:[
                ContentBlock(busName: "Dave's Cafe", busId: 1, contentId: "123", title: "Testola!", body: "Hello there!")
            ]),
        Business(busName:...
]
Run Code Online (Sandbox Code Playgroud)

我可以使用以下内容过滤数组以返回与唯一匹配的特定企业busId

let rtnArray = masterArray.filter{$0.busId == id}
    if rtnArray.count == 1{
        return rtnArray[0]
    } else {
        return // feedback that no matches were found
    }
Run Code Online (Sandbox Code Playgroud)

此外,我想通过过滤唯一的内容来返回特定的内容块contentId(如有必要,我也可以传递busId …

swift

6
推荐指数
1
解决办法
5706
查看次数

Firebase 应用内消息中心/收件箱设计

我想构建一个应用程序内收件箱(又名消息中心)作为向我的应用程序用户存储消息的中心位置。考虑单向电子邮件通知,而不是用户-用户聊天。这是我想到的事情(取自维多利亚的秘密应用程序):

VS应用

Urban Airship有一款产品可以满足我的需求,Intercom.io 也很接近(尽管它更侧重于聊天而不是异步电子邮件风格的消息)。但是,我在我的应用程序的其他地方使用 Firebase,所以我认为对应用程序内收件箱使用相同的 SDK 而不是引入另一个 3rd 方是有意义的。

我的问题是:有谁知道以下逻辑是否有意义(我首先使用 Swift 在 iOS 上进行开发)?

  1. 创建一个 tableView 作为“收件箱”
  2. 使用Firebase Cloud Messaging (FCM) 向应用发送负载,包括消息标题、正文等
  3. 向应用程序添加一个方法以接收有效负载并更新 tableView 的数据源

理想情况下,如果收到消息时应用程序在后台,我想触发通知(+ 徽章更新),当应用程序在前台时触发应用程序内通知。我假设我可以用 FCM/ Notifications做到这一点。

过去有没有人创造过这种东西,或者有任何我应该注意的建议陷阱?

ios firebase google-cloud-messaging firebase-cloud-messaging

6
推荐指数
0
解决办法
1495
查看次数

适用于Firebase性能的云功能

我正在使用Cloud Functions for Firebase:

  1. 从api.ai接收参数
  2. 拨打第三方API和
  3. 回复api.ai.

我对第三方API的调用使用请求Node.js模块,并包含getInfoFromApi()在index.js中的function()中.

我遇到的问题是辅助函数调用的执行始终在15-20秒之间.注意:云功能本身在400 ms范围内始终如一地完成执行.

通过将简单的注释记录到控制台,我可以看到函数何时启动,何时调用辅助函数以及何时收到第三方的响应,所以我想我可以看到发生了什么.

粗略地说,时间看起来像这样:

  • 0:云函数初始化
  • 400毫秒:云功能完成
  • 16 s:getInfoFromApi()调用函数(!)
  • 17 s:第三方API返回结果

我的问题:

  • 是否有明显的原因导致延迟调用辅助功能?这似乎不是由冷启动问题引起的,因为云功能快速恢复生命并且即使在重复呼叫之后延迟也是一致的.
  • 是否使用"请求"节点模块导致问题?是否有更好的模块用于创建/管理来自云功能的http请求?

你可以在这里看到index.js的简化要点:https://gist.github.com/anonymous/7e00420cf2623b33b80d88880be04f65

以下是Firebase控制台的示例,其中显示了示例时间.注意:输出与上面的代码略有不同,因为我简化了上面的代码以帮助理解. 在此输入图像描述

node.js firebase google-cloud-functions

5
推荐指数
1
解决办法
1586
查看次数

Firebase 验证同一用户的多个电子邮件地址

我正在使用 Firebase Web SDK 4.0.0 并希望让我的用户能够验证同一帐户的多个电子邮件地址。对于上下文,我的目标是接收来自 dave@home.com 和 dave@work.com 的电子邮件,并知道它肯定来自 Dave (uid 123456789)。

我查阅了有关链接帐户文档,但我认为这种方法行不通,因为我需要多封电子邮件。

我想过将电子邮件存储在数据库中并将它们链接到用户,但这并没有与 Firebase 验证过程(我想使用)挂钩。

关于如何解决这个问题的任何想法都会非常有帮助。

firebase firebase-authentication

5
推荐指数
1
解决办法
1831
查看次数

在后台输入带有应用程序的iBeacon区域,并在不通知的情况下请求URL

我已经做了很多搜索SO和谷歌试图得到一个答案,但我没有能够把拼图的所有部分放在一起,所以任何帮助/指针都会很棒.

我想构建一个在进入iBeacon区域时检查Web服务的应用程序.简单的示例用例是这样的:

  1. 用户在后台走进带有应用程序的iBeacon配备商店

  2. 应用程序向Web服务器发出请求以检查用户ID是否为成员(该应用程序已被授予用户向服务器发送用户ID的权限),而不是通知用户.

3A.服务器发回"真实"响应

4A.应用程序发送"我们今天有特别会员促销"通知锁屏.

要么

3B.服务器发回"错误"响应

4B.应用程序保持沉默(不通知用户)

仅供参考,这个答案似乎表明可以在后台发送URL请求:在后台 运行URL请求

ios bluetooth-lowenergy ibeacon

4
推荐指数
1
解决办法
2534
查看次数

快速解决选择问题

我是一个快速的新手,并试图让选项工作.我已经做了很多谷歌搜索,阅读Apple Docs等,但我正在努力从我的ViewController这个(简化)片段:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if (segue.identifier == "segueToWebView") {
        // check what we're passing around
        print(sender!.urlString) // Optional("http://www.bbc.co.uk")

        // do some url validation etc
        var destUrl:String
        if sender!.urlString == nil{
            destUrl = "http://www.google.com"
        } else {
            destUrl = sender!.urlString // *** Error here ***
        }

        let targetWebViewController:GDWebViewController = segue.destinationViewController as! GDWebViewController
        targetWebViewController.loadURLWithString(destUrl)
        targetWebViewController.showsToolbar = true
        targetWebViewController.title = sender!.busName // this works correctly too (so isn't that a String?)
    }
}
Run Code Online (Sandbox Code Playgroud)

错误Cannot assign value of …

ios swift

4
推荐指数
1
解决办法
114
查看次数

离线启用Google附近消息API?

我在iOS应用中使用“附近的消息” API接收了由Eddystone信标触发的消息,它运行良好。我正在使用Firebase的实时数据库作为应用程序的后端。由于Firebase的缓存非常棒,因此我能够使该应用程序在离线状态下运行良好。

我的问题是,是否有人知道/使用一种技术(可能与Firebase结合使用)来预先缓存与信标关联的附件(例如,将所有Eddystone附件缓存在特定名称空间中),以便在应用程序没有连接时可以有效地获取信标附件上网。

任何探索领域的建议都将是不错的。

firebase eddystone beacon google-nearby

3
推荐指数
1
解决办法
653
查看次数