我有一个包含多个对象的Firebase资源,我想使用Swift迭代它们.我期望的工作如下(根据Firebase文档)
https://www.firebase.com/docs/ios-api/Classes/FDataSnapshot.html#//api/name/children
var ref = Firebase(url:MY_FIREBASE_URL)
ref.observeSingleEventOfType(.Value, withBlock: { snapshot in
println(snapshot.childrenCount) // I got the expected number of items
for rest in snapshot.children { //ERROR: "NSEnumerator" does not have a member named "Generator"
println(rest.value)
}
})
Run Code Online (Sandbox Code Playgroud)
因此,似乎Swift迭代Firebase返回的NSEnumerator对象存在问题.
真的很受欢迎.
如何使用NSEnumerator和NSMutableDictionary打印出所有键和值?
谢谢!
我知道如果你有一个循环来修改循环中项目的计数,在集合上使用NSEnumerator是确保代码爆炸的最佳方法,但是我想了解NSEnumerator类之间的性能权衡而且只是一个旧学校的循环
我一遍又一遍地看到这一点,为什么在循环中使用快速枚举而不是NSEnumerator使用它更快nextObject:.
我正在使用Doxygen来记录用Objective-C编写的API.
Doyxygen无法理解NS_ENUM typedef.
我找到了这个解决方案,但它对我不起作用.
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = YES
EXPAND_ONLY_PREDEF = YES
PREDEFINED = NS_ENUM(x,y)=y
Regards,
Dimitri
Run Code Online (Sandbox Code Playgroud)
这是我的输入文件:
/**
* Represent the possible states.
*/
typedef NS_ENUM(NSInteger, ABEnumType)
{
/**
* State A.
*/
StateA = 0,
/**
* State B.
*/
StateB
};
Run Code Online (Sandbox Code Playgroud)
这是我得到的输出:
Preprocessing /src/ABEnumType.h...
error: /src/ABEnumType.h:17:17: error: C++ requires a type specifier for all declarations [clang]
error: /src/ABEnumType.h:17:28: error: unknown type name 'ABEnumType' [clang]
error: /src/ABEnumType.h:18:1: error: function definition is not allowed here [clang]
error: /src/ABEnumType.h:17:9: …Run Code Online (Sandbox Code Playgroud) 什么时候...在...可以吗?
具体来说,当我们可以写:
NSArray *array;
// array allocated and initialized here.
for (id obj in array) {
// do something to the object here
}
Run Code Online (Sandbox Code Playgroud)
我们为什么要使用NSEnumerator?
我有这个功能:
void myFunc(NSString* data) {
NSMutableArray *instrs = [[NSMutableArray alloc] initWithCapacity:[data length]];
for (int i=0; i < [data length]; i++) {
unichar c = [data characterAtIndex:i];
[instrs addObject:c];
}
NSEnumerator *e = [instrs objectEnumerator];
id inst;
while (inst = [e nextObject]) {
NSLog("%i\n", inst);
}
}
Run Code Online (Sandbox Code Playgroud)
我认为它失败了[instrs addObject:c].它的目的是遍历NSString的十六进制数.导致此代码失败的原因是什么?
我试图枚举一堆对象,根据情况,这些对象可能是 NSArray 或 NSOrderedSet。由于两者都符合 NSFastEnumeration,我希望它能工作:
id<NSFastEnumeration> enumerableSet =
(test) ?
[NSArray arrayWithObjects:@"one", @"two", @"three", nil] :
[NSOrderedSet orderedSetWithObjects:@"one", @"two", @"three", nil];
NSEnumerator *e = [enumerableSet objectEnumerator];
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下编译器错误:
选择器“objectEnumerator”没有已知的实例方法。
我怀疑这里有一些语法错误,我之前没有太多使用 id 构造。我可以将其中一个或两个集合转换为公共类,但如果可能的话,我想更好地了解这里发生的情况。
nsenumerator ×8
objective-c ×6
ios ×2
cocoa ×1
doxygen ×1
firebase ×1
iphone ×1
iteration ×1
swift ×1