如何在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) 我已向 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 外形尺寸之间效果很好(动态调整列数,完全按照我的需要)。
对不起,如果这个问题太简单了; 我只进入了9年级.
我正在尝试了解NoSQL数据库设计.我想设计一个最小化读/写次数的Google Datastore模型.
这是博客文章的玩具示例和一对多关系中的评论.哪个更有效 - 将所有注释存储在StructuredProperty中或使用Comment模型中的KeyProperty?
同样,目标是最小化对数据存储的读/写次数.您可以做出以下假设:
使用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
我正在将我的ndb代码库尽可能多地移动到异步中.有一种情况我不太清楚如何继续:交易.
在我看来,我有3种选择:
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)
ndb.transaction() …在我的应用程序上执行负载测试时,我注意到Instances仪表板图表显示了活动和计费实例的数量之间存在很大差异:

什么是积极的和总的意思吗?
此外,在花了一天运行负载测试后,这是我看到的:

在第一个峰值中,结算实例的数量几乎与总实例数相匹配.然后,在后续加载时,计费实例的数量位于总计和活动之间.
更新2013-02-21:我今天做了另一批负载测试,我仍然看到计费实例相对于total和_active的位置存在差异:

这些数字是如何计算的?考虑到我试图根据这些数字预测运营成本,应该如何理解它们呢?
我有一个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) 在阅读了键值编码编程指南,键值观察编程指南和模型对象实现指南,以及阅读关于该主题的许多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通过该 …
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上的应用程序,当我们无法使用您的域帐户的Google Apps设置Google Checkout帐户时,我已为其启用了结算功能.
所以我所做的是将公司的信用卡添加到我的个人Google Checkout帐户,并使用我的个人Checkout帐户支付GAE应用程序每周费用.
现在可以使用域帐户设置Google Checkout(也称为Google电子钱包),我想将我公司的GAE应用帐单转移到我使用公司的Google App域帐户创建的电子钱包/结帐帐户.
但是,我在应用程序管理控制台的" 结算设置"部分中没有看到任何明显的方法,文档仅提及如何将结算责任转移给其他人.
有人知道怎么做这个吗?
谢谢!
该文档的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可能有数千件物品.
这种类型的查询是否能够很好地处理列表中数千个可能的值?如果没有,建议的方法是什么?