#ios #objective-c #nsstring #mapkit
#iOS #objective-c #nsstring #mapkit
Вопрос:
Прошу прощения, если это вопрос новичка.
Я следил за этим руководством по mapkit и наткнулся на эту строку кода
NSString *json = [NSString stringWithFormat:formatString,
centerLocation.latitude,
centerLocation.longitude,
0.5 * METERS_PER_MILE];
Причина, по которой это необычно, по крайней мере, для меня, заключается в том, что в нем отсутствует строка nsstring, в которой есть флаги %@. В руководстве утверждается, что мы добавляем информацию о широте и долготе в json.
Но когда я распечатываю FormatString и json, результат идентичен.
Я никогда раньше не видел, чтобы nsstrings использовались таким образом. Есть ли скрытая переменная, которая устанавливается?
Может кто-нибудь объяснить мне, как этот объект nsstring (с именем json) содержит эти 4 аргумента?
Ответ №1:
Где-то еще в коде FormatString должен быть определен примерно так:
NSString *formatString = @"latitude=%f, longitude=%f, %f = half the number of meters in a mile";
Убедитесь, что ваш тест выглядит следующим образом:
NSLog(@"the format is %@ and the json is %@", formatString, json);
Они не должны выглядеть одинаково. Единственный способ, которым они будут выглядеть одинаково, — это если строка формата не ссылается ни на какие спецификаторы формата, например:
NSString *formatString = @"I'm a silly format with no percent format specifiers";
Вот хорошее вступление по теме от Apple.
Ответ №2:
Который formatString
на самом деле содержит %@
‘s. Это может быть так:
NSString *formatString = @"lat: %f | lon: %f | half-meters-per-mile: %f";
NSString *json = [NSString stringWithFormat:formatString,
centerLocation.latitude,
centerLocation.longitude,
0.5 * METERS_PER_MILE];
(я предполагаю, что замены ( %f
) могут быть неправильными)
Что касается того, как он содержит эти четыре аргумента, все после первого — это значения, которые вы хотите добавить в строку. Первая строка — это строка, в которой указано, куда поместить эти значения.
Ответ №3:
Если вы проверите руководство, следующая строка кода будет написана над тем, что вы опубликовали-
NSString *jsonFile = [[NSBundle mainBundle] pathForResource:@"command" ofType:@"json"];
NSString *formatString = [NSString stringWithContentsOfFile:jsonFile encoding:NSUTF8StringEncoding error:nil];
Отсюда создается строка формата, этот файл будет доступен в папке ресурсов вашего руководства.