[ios]我如何可以解析 NSArray 只采取每个数组条目的一部分?

标签: ios Objective-C
发布时间: 2017/3/21 23:41:04
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

这里是我的数组,它是我的后端响应

NSArray  *myArray = [NSArray arrayWithObjects:@"  userId: 123, online: 0, subscriptionState: none",@"  userId: 124, online: 0, subscriptionState: none",@"  userId: 125, online: 1, subscriptionState: none",nil];
NSLog(@"this is an example array=%@", myArray);]

日志︰

this is an example array=(
    "  userId: 123, online: 0, subscriptionState: none",
    "  userId: 124, online: 0, subscriptionState: none",
    "  userId: 125, online: 1, subscriptionState: none"
)

我想要从这个数组,以使一个新数组,会有像这样的日志输出中提取只有用户 Id 号码

this is the new array=(
        "123",
        "124",
        "125"
    )

解决方法 1:

请尝试创建一个新 Class User:NSObject 和使用数组的用户而不试图要解析这个东西了。如果你正在跟踪每个用户的项目,然后你真的需要一个用户类来包含它。这将允许您使用用户对象而不是一个字符串,你分析出。这给了你更多的力量、 灵活性和更简洁的代码。

User.h

@interface User : NSObject

@property (nonatomic) int userId;
@property (nonatomic) BOOL isOnline;
@property (nonatomic) int subscriptionState;

然后在您的类︰

User *user1 = [User new];
user1.userId = 123;
user1.isOnline = NO;
user1.subscriptionState = 0;
...

NSArray *usersArray = [NSArray arrayWithObjects:user1,user2,user3,nil];
for (User *curUser in usersArray)
{
   NSLog(@"User ID: %d", curUser.userId);
}

现在你可以打印出来,如果他们在线,他们的 subscriptionState 是什么,和也使更新到用户很容易。之前,你必须手动更新整个 NSString 用户如果他们改变了他们的 subscriptionState,或者如果他们来在线。例如,如果 User1 来在线,然后您将必须重置它到︰ @" userId: 123, online: 1, subscriptionState: none" 。这是工作的非常混乱和很多。现在,您就可以:

 user1 = [usersArray objectAtIndex:0];
 user1.isOnline = YES;

更新︰

它被带到我这是从一个后端服务器返回的注意。请注意这是如何做到工作与退货,如果你不能修复后端后端。它是方法的高度 unsuggested 使用这种类型,除非你方法的被迫接受。

NSArray *wordArray = [userString componentsSeparatedByString:@","];
NSString *userId = [[[wordArray objectAtIndex:0] componentsSeparatedByString:@":"] objectAtIndex:1];
NSString *online = [[[wordArray objectAtIndex:1] componentsSeparatedByString:@":"] objectAtIndex:1];
NSString *subscriptionStatus = [[[wordArray objectAtIndex:2] componentsSeparatedByString:@":"] objectAtIndex:1];
官方微信
官方QQ群
31647020