有没有办法构造一个谓词来按类类型过滤?
我目前循环遍历数组并检查每个对象的类.也许有更干净的方式?
我有一个像大等NSArray包含...NSNumbers3, 4, 20, 10, 1, 100,
如何将所有这些NSNumber的总和(3 + 4 + 20 + 10 + 1 + 100 + etc...)作为一个总和NSInteger?
谢谢!
我最近注意到一些奇怪的东西似乎在objective-c中起作用.
当我有一个阵列,
NSArray *myArray = @[@"1", @"b", @"3", @"d"];
Run Code Online (Sandbox Code Playgroud)
我通常可以访问第二个元素,
NSString *element = [myArray objectAtIndex:1]; // second element
Run Code Online (Sandbox Code Playgroud)
但是我现在似乎也可以通过它访问它.
NSString *element = myArray[1];
Run Code Online (Sandbox Code Playgroud)
有谁知道这现在是一个定义的行为,因此可以安全使用,还是应该避免它?感谢任何能提供帮助的人!!
目标是比较两个数组并检查它们是否包含相同的对象(尽可能快 - 数组中有很多对象).无法检查数组,isEqual:因为它们的排序方式不同.
我已经尝试过这里发布的解决方案(/sf/answers/79689221/ - 请参阅Peter Hosey发布的帖子的最后一个代码片段).但这不适用于不同排序的数组.
我现在使用的代码如下:
+ (BOOL)arraysContainSameObjects:(NSArray *)array1 andOtherArray:(NSArray *)array2 {
// quit if array count is different
if ([array1 count] != [array2 count]) return NO;
BOOL bothArraysContainTheSameObjects = YES;
for (id objectInArray1 in array1) {
BOOL objectFoundInArray2 = NO;
for (id objectInArray2 in array2) {
if ([objectInArray1 isEqual:objectInArray2]) {
objectFoundInArray2 = YES;
break;
}
}
if (!objectFoundInArray2) {
bothArraysContainTheSameObjects = NO;
break;
}
}
return bothArraysContainTheSameObjects;
}
Run Code Online (Sandbox Code Playgroud)
这有效,但这些是两个嵌套的快速枚举.有没有办法做更快的比较?
我有一个包含字典对象的数组.在每个字典中,密钥是常见的.现在我想获得该密钥的所有值.我有迭代的这些值,但我正在寻找一些直接的方法或一个默认的方法来完成这项工作.
你能帮我一个默认的方法来达到目的吗?谢谢.
数据结构是这样的:
<array>
<dict>
<key>Match</key>
<string>Football</string>
<key>Stadium</key>
<string>XXXXX</string>
</dict>
<dict>
<key>Match</key>
<string>HOCKY</string>
<key>Stadium</key>
<string>XXXXX</string>
</dict>
</array>
Run Code Online (Sandbox Code Playgroud)
我现在这样做:
NSMutableArray * matches = [[NSMutableArray alloc] init];
for (int i = 0; i< myArray.count; i++){
[matches insertObject:[[myArray objectAtIndex:i] objectForKey:@"Match"] atIndex:i];
}
[matchDataArray addObjectsFromArray:matches];
Run Code Online (Sandbox Code Playgroud)
它给了我正确的答案.但我不想做这个迭代.我想要一个方法,它将从数组的所有索引返回"匹配"键的所有值,并立即保存在另一个数组中.新创建的数组将只包含来自数组的所有索引的Match键值.
这可能吗??
在Objective-C我可以NSArray使用此声明排序:
NSArray *sortedArray = [persons sortedArrayUsingComparator:^NSComparisonResult(Person *p1, Person *p2) {
return [p1.name compare:p2.name];
}];
Run Code Online (Sandbox Code Playgroud)
我无法用Swift重现相同的声明.我发现的只是使用Array.
我正在使用Google的' reverseGeocodeCoordinate'来获取基于纬度和经度的地址.
我在实现中遇到以下错误
对成员'joinWithSeparator'的模糊引用
以下是我的实施:
let aGMSGeocoder: GMSGeocoder = GMSGeocoder()
aGMSGeocoder.reverseGeocodeCoordinate(CLLocationCoordinate2DMake(17.45134626, 78.39304448)) {
(let gmsReverseGeocodeResponse: GMSReverseGeocodeResponse!, let error: NSError!) -> Void in
let gmsAddress: GMSAddress = gmsReverseGeocodeResponse.firstResult()
print("lines=\(gmsAddress.lines)")
let addressString = gmsAddress.lines.joinWithSeparator("")
print("addressString=\(addressString)")
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试addressString使用数组' gmsAddress.lines'中的元素创建一个,但最终会出现错误消息.
实施了一些示例代码片段来测试' joinWithSeparator'
let sampleArray = ["1", "2", "3", "4", "5"]
let joinedString = sampleArray.joinWithSeparator("")
print("joinedString=\(joinedString)")
Run Code Online (Sandbox Code Playgroud)
它成功了.
我观察到的是' sampleArray'是一个类型的元素数组String,但是' gmsAddress.lines'是' AnyObject' 类型的元素数组,在' GMSAddress'库中找到:
/** An array of NSString containing formatted lines of the address. …Run Code Online (Sandbox Code Playgroud) 我有一个NSArray objects,它有一个特殊的属性叫name(类型NSString).
我有第二个NSStrings的NSArray names.
我想获得一个NSArray所有objects其.name属性相匹配的一个names第二NSArray的.
我如何快速有效地解决这个问题,因为这将经常需要.
有一个数组,每个元素都是一个NSDictionary.
NSMutableArray *mutArr = [NSMutableArray array];
for (Person *person in persons) {
NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:person.name, @"name", person.email, @"email", nil];
[mutArr addObject:dict];
}
self.arr = [[NSArray alloc] initWithArray:mutArr];
Run Code Online (Sandbox Code Playgroud)
如何通过使用方法使用arr名称或电子邮件文件管理包含字符串.@"filter string"filterArrayUsingPredicate:
提前致谢!
根据Apple的"使用Swift with Cocoa和Objective-C","在Swift中,您可以互换使用每对免费桥接基础和Core Foundation类型".这使得使用Core Foundation的声音比实际更简单...
我正在尝试使用从CoreText返回的CFArray.我有这个代码:
let lines: CFArrayRef = CTFrameGetLines(frame)
Run Code Online (Sandbox Code Playgroud)
我看到两种可能的方法来访问这个数组的成员.现在也没有为我工作.
方式#1 - 直接使用CFArray
let line: CTLineRef = CFArrayGetValueAtIndex(lines, 0)
Run Code Online (Sandbox Code Playgroud)
这会产生错误"'ConstUnsafePointer <()>',不能转换为'CTLineRef'".转换似乎不会改变此错误.
同样,我很乐意将"可互换"的行用作Swift数组,就像我说的那样.然而,
let line: CTLineRef = lines[0]
Run Code Online (Sandbox Code Playgroud)
产生错误"'CFArrayRef'没有名为'subscript'的成员"
方式#2 - 将CFArray转换为Swift数组
var linesArray: Array = [CTLineRef]()
linesArray = bridgeFromObjectiveC(lines, linesArray.dynamicType)
Run Code Online (Sandbox Code Playgroud)
在这里,我声明了一个Swift数组并将其设置为等同于桥接的CFArray.这个编译没有错误,但是当我运行它时,我在第二行遇到EXC_BREAKPOINT崩溃.也许我没有在这个上正确使用Swift语言......
nsarray ×10
objective-c ×6
ios ×3
iphone ×3
swift ×3
nspredicate ×2
cocoa ×1
cocoa-touch ×1
ios9 ×1
ipad ×1
nsdictionary ×1
nsinteger ×1
nsnumber ×1
shorthand ×1
sorting ×1