小编Pas*_*que的帖子

在Swift中声明并使用位字段枚举

如何在Swift中声明和使用位字段?

声明这样的枚举确实有效,但尝试将OR 2值一起编译失败:

enum MyEnum: Int
{
    case One =      0x01
    case Two =      0x02
    case Four =     0x04
    case Eight =    0x08
}

// This works as expected
let m1: MyEnum = .One

// Compiler error: "Could not find an overload for '|' that accepts the supplied arguments"
let combined: MyEnum = MyEnum.One | MyEnum.Four
Run Code Online (Sandbox Code Playgroud)

我查看了Swift如何导入Foundation枚举类型,它通过定义struct符合RawOptionSet协议的方式来实现:

struct NSCalendarUnit : RawOptionSet {
    init(_ value: UInt)
    var value: UInt
    static var CalendarUnitEra: NSCalendarUnit { get }
    static …
Run Code Online (Sandbox Code Playgroud)

enums bit-fields swift

36
推荐指数
5
解决办法
3万
查看次数

如何使 LazyVGrid 中的每个项目具有相同的高度?

编辑这是 iOS 15 beta 中的回归。该代码在 iOS 14.5 上按预期运行:

在此输入图像描述

我已向 Apple 提交了一个错误。


我的 SwiftUI 应用程序中有一个仪表板样式的屏幕,我在其中使用LazyVGrid单列来.adaptative布局仪表板小部件,其中小部件以换行方式布置。

它按照我想要的方式工作。

但是,如果一个小部件碰巧比其他小部件高,我希望同一行中的其他小部件垂直增长,因此它们最终具有与该行最高的部件相同的高度。

这段小代码说明了我的问题:

struct ContentView: View {
  var body: some View {
    LazyVGrid(columns: [.init(.adaptive(minimum: 45, maximum: 50), alignment: .top)]) {

      VStack {
        Spacer()
        Text("Hello")
      }
      .border(.red)

      Text("Lorem ipsum")
        .border(.blue)
    }
    .border(.green)
    .padding(.horizontal, 100)
  }
}
Run Code Online (Sandbox Code Playgroud)

结果是:

截屏

我希望红色盒子(VStack包含Spacer+ Hello )与蓝色盒子( lorem ipsum )一样高。

我怎样才能做到这一点?

请不要建议使用HStack,因为上面的示例只是为了说明我的问题LazyVGrid。我确实需要使用网格,因为我有相当多的子项需要布局,并且网格在手机和 iPad 外形尺寸之间效果很好(动态调整列数,完全按照我的需要)。

swiftui

19
推荐指数
1
解决办法
7079
查看次数

Google App Engine数据存储区中最高效的一对多关系?

对不起,如果这个问题太简单了; 我只进入了9年级.

我正在尝试了解NoSQL数据库设计.我想设计一个最小化读/写次数的Google Datastore模型.

这是博客文章的玩具示例和一对多关系中的评论.哪个更有效 - 将所有注释存储在StructuredProperty中或使用Comment模型中的KeyProperty?

同样,目标是最小化对数据存储的读/写次数.您可以做出以下假设:

  • 不会独立于各自的博客文章检索评论.(我怀疑这使得StructuredProperty最受欢迎.)
  • 注释需要按日期,评级,作者等进行排序.(数据存储区中的子属性无法编入索引,因此可能会影响性能?)
  • 创建后,博客文章和评论都可以编辑(甚至删除).

使用StructuredProperty:

from google.appengine.ext import ndb

class Comment(ndb.Model):
    various properties...

class BlogPost(ndb.Model):
    comments = ndb.StructuredProperty(Comment, repeated=True)
    various other properties...
Run Code Online (Sandbox Code Playgroud)

使用KeyProperty:

from google.appengine.ext import ndb

class BlogPost(ndb.Model):
    various properties...

class Comment(ndb.Model):
    blogPost = ndb.KeyProperty(kind=BlogPost)
    various other properties...
Run Code Online (Sandbox Code Playgroud)

请尽量提出与有效表示一对多关系相关的任何其他注意事项,以尽量减少对数据存储区的读/写次数.

谢谢.

google-app-engine one-to-many nosql app-engine-ndb google-cloud-datastore

16
推荐指数
1
解决办法
4098
查看次数

ndb.transaction_async()与事务内的异步调用

我正在将我的ndb代码库尽可能多地移动到异步中.有一种情况我不太清楚如何继续:交易.

在我看来,我有3种选择:

选项1:ndb.transaction()同步调用,并使事务的函数调用异步方法.

def option_1():
    @ndb.tasklet
    def txn():
        e = yield Foo.get_by_id_async(some_id)
        if e is None:
            e = yield Foo().put_async()
        raise ndb.Return(e)

    # The doc for ndb.transaction() says that it takes a function or tasklet.
    # If it's a tasklet, does it wait on the Future that is returned?
    # If it doesn't wait, what is the proper way to call a tasklet in a transaction
    # and get access to its return value?
    return ndb.transaction(txn)
Run Code Online (Sandbox Code Playgroud)

选项2:ndb.transaction() …

google-app-engine app-engine-ndb

12
推荐指数
1
解决办法
1302
查看次数

为什么"开帐单"实例的数量远远大于"活动"实例的数量?

在我的应用程序上执行负载测试时,我注意到Instances仪表板图表显示了活动计费实例的数量之间存在很大差异:

截图

什么是积极的的意思吗?

此外,在花了一天运行负载测试后,这是我看到的:

在此输入图像描述

在第一个峰值中,结算实例的数量几乎与总实例数相匹配.然后,在后续加载时,计费实例的数量位于总计活动之间.

更新2013-02-21:我今天做了另一批负载测试,我仍然看到计费实例相对于total和_active的位置存在差异:

在此输入图像描述

这些数字是如何计算的?考虑到我试图根据这些数字预测运营成本,应该如何理解它们呢?

google-app-engine

8
推荐指数
1
解决办法
835
查看次数

使用MCNearbyServiceBrowser时找不到广告商

我有一个MultipeerService类,用于启动广告和浏览会话.出于某种原因,我不确定为什么我无法看到任何广告客户.

MultipeerService.m

-(void) startAdvertising
{
    NSString *name = [[UIDevice currentDevice] name];

    MCPeerID *peerId = [[MCPeerID alloc] initWithDisplayName:name];
    self.session = [[MCSession alloc] initWithPeer:peerId];
    self.session.delegate = self;

    self.advertiser = [[MCNearbyServiceAdvertiser alloc] initWithPeer:peerId discoveryInfo:nil serviceType:kServiceType];
    self.advertiser.delegate = self;

    [self.advertiser startAdvertisingPeer];
}

-(void) startBrowsing
{
    NSString *name = [[UIDevice currentDevice] name];

    MCPeerID *peerId = [[MCPeerID alloc] initWithDisplayName:name];
    self.session = [[MCSession alloc] initWithPeer:peerId];
    self.session.delegate = self;

    self.browser = [[MCNearbyServiceBrowser alloc] initWithPeer:peerId serviceType:kServiceType];
    self.browser.delegate = self;

    [self.browser startBrowsingForPeers];
}
Run Code Online (Sandbox Code Playgroud)

我启动广告客户,如下所示:

 _multipeerConnectivityService = [[MultipeerConnectivityService alloc] init];
[_multipeerConnectivityService …
Run Code Online (Sandbox Code Playgroud)

ios multipeer-connectivity

8
推荐指数
1
解决办法
1381
查看次数

应该将"to-many"关系建模为属性吗?

在阅读了键值编码编程指南,键值观察编程指南模型对象实现指南,以及阅读关于该主题的许多StackOverflow条目并尝试各种建模场景之后,我觉得我对如何建模我的数据.

我最终使用所有属性的声明属性和一个由私有ivars支持的关系.对于需要可私有写入的只读属性,我readonly.h接口声明中使用该属性,然后readwrite使用.m文件中声明的类扩展中的属性重新声明该属性.在类方法中,我总是使用带有点语法的属性访问器,并且永远不会直接访问私有的ivars.

然而,有一个方面让我感到困惑:如何正确地建模到多个关系,特别是当集合是公开不可变的,但私下可变的(即模型对象的消费者不能添加或删除集合中的对象,但该集合的内容由该类私人管理).

我明白了如何实现一对多关系(KVC的存取方法countOf<Key>,objectsIn<Key>AtIndex等等),这是我到目前为止一直在跟随的路线.

但是,我已经看到一些示例代码使用声明的属性来公开关系,不实现KVC访问器方法,但仍然是Key-Value可观察的.例如:

@interface MyModel : NSObject
{
  // Note that the ivar is a mutable array,
  // while the property is declared as an immutable array.
  @private NSMutableArray *transactions_;
}

@property (nonatomic, retain, readonly) NSArray transactions;

@end

--------------------

@implementation MyModel

@synthesize transactions = transactions_;

- (void)privateMethodThatManagesTransactions
{
  [[self mutableArrayValueForKey:@"transactions"] addObject:t];
}

@end
Run Code Online (Sandbox Code Playgroud)

如果使用者对象将自身添加MyModel"transactions"关键路径的实例的观察者,则只要transactions通过该 …

cocoa model key-value-observing key-value-coding

7
推荐指数
1
解决办法
781
查看次数

在ndb tasklet中使用images.get_serving_url_async()是否安全?

NDB tasklet yield是一种做异步/并行代码的好方法.但是,从文档中可以清楚地看出,这种机制可以安全地与非ndb异步函数一起使用,例如images.get_serving_url_async().

NDB异步操作文档页面有大约使用的NDB上下文的自己的版本一个很小的部分urlfetch_async(),其中规定(重点煤矿):

URL Fetch服务具有自己的异步请求API.它很好,但并不总是很容易使用NDB tasklet.

我不清楚为什么"并不总是很容易使用NDB tasklets",这让我想知道相同的陈述是否适用images.get_serving_url_async().

所以我的问题是:如果我这样做,我会遇到麻烦吗?

@ndb.tasklet
def foo():
    url = yield images.get_serving_url_async(image_key)
Run Code Online (Sandbox Code Playgroud)

google-app-engine app-engine-ndb

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

如何将Google App Engine应用程序结算转移到其他Google Checkout(电子钱包)帐户?

我的公司有一个托管在Google App Engine上的应用程序,当我们无法使用您的域帐户的Google Apps设置Google Checkout帐户时,我已为其启用了结算功能.

所以我所做的是将公司的信用卡添加到我的个人Google Checkout帐户,并使用我的个人Checkout帐户支付GAE应用程序每周费用.

现在可以使用域帐户设置Google Checkout(也称为Google电子钱包),我想将我公司的GAE应用帐单转移到我使用公司的Google App域帐户创建的电子钱包/结帐帐户.

但是,我在应用程序管理控制台的" 结算设置"部分中没有看到任何明显的方法,文档仅提及如何将结算责任转移给其他人.

有人知道怎么做这个吗?

谢谢!

google-app-engine

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

NDB成员资格查询("IN"操作)性能是否会因许多可能的值而降低?

文档IN查询操作规定,这些查询被作为一个大的逻辑或运算平等查询实现:

qry = Article.query(Article.tags.IN(['python', 'ruby', 'php']))
Run Code Online (Sandbox Code Playgroud)

相当于:

qry = Article.query(ndb.OR(Article.tags == 'python',
                           Article.tags == 'ruby',
                           Article.tags == 'php'))
Run Code Online (Sandbox Code Playgroud)

我目前正在为GAE项目建模一些实体,并计划使用具有许多可能值的这些成员资格查询:

qry = Player.query(Player.facebook_id.IN(list_of_facebook_ids))
Run Code Online (Sandbox Code Playgroud)

哪里list_of_facebook_ids可能有数千件物品.

这种类型的查询是否能够很好地处理列表中数千个可能的值?如果没有,建议的方法是什么?

google-app-engine app-engine-ndb google-cloud-datastore

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