تحويل NSDictionary إلى سلسلة باستخدام كتل؟
-
28-09-2019 - |
سؤال
أنا متأكد من أن هناك طريقة للقيام بذلك باستخدام الكتل ، لكن لا يمكنني معرفة ذلك. أريد أن أحول NSDictionary إلى سلسلة من المعلمات على غرار URL. إذا كان لدي nsdictionary يشبه هذا:
dict = [NSDictionary dictionaryWithObjectsAndKeys:@"blue", @"color", @"large", @"size", nil]];
ثم كيف يمكنني تحويل ذلك إلى سلسلة تشبه هذا:
"color=blue&size=large"
تعديل
شكرا على القرائن أدناه. هذا يجب أن يفعل ذلك:
NSMutableString *parameterString;
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
[parameterString appendFormat:@"%@=%@&", key, obj];
}];
parameterString = [parameterString substringToIndex:[string length] - 1];
المحلول
نفس الحل تمامًا ولكن بدون السلسلة الفرعية:
NSMutableArray* parametersArray = [[[NSMutableArray alloc] init] autorelease];
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
[parametersArray addObject:[NSString stringWithFormat:@"%@=%@", key, obj]];
}];
NSString* parameterString = [parametersArray componentsJoinedByString:@"&"];
نصائح أخرى
قم بإنشاء سلسلة قابلة للتغيير ، ثم تكرار القاموس للحصول على كل مفتاح. ابحث عن قيمة هذا المفتاح ، وأضف ملف key=value&
إلى السلسلة. عند الانتهاء من تلك الحلقة ، قم بإزالة آخر و.
أفترض أن هذا سيتم تغذيته من خلال عنوان URL ، ستحتاج أيضًا إلى الحصول على بعض الطرق التي تشفر خيوطك ، في حالة احتوائها على عناصر مثل و +، إلخ.
NSMutableString* yourString = @"";
for (id key in dict) {
[yourString appendFormat:@"%@=%@&", key, ((NSString*)[dict objectForKey:key])];
}
NSRange r;
r.location = 0;
r.size = [yourString length]-1;
[yourString deleteCharactersInRange:r];
لا تنتمي إلى StackOverflow