Подтвердить что ты не робот

Id для NSString

есть ли способ, с помощью которого я могу изменить тип id на объект NSString? обратите внимание на следующую строку моего кода.

NSString *value = [appDelegate.bird_arr objectAtIndex:rowClicked] ;

в этом appDelegate является объектом моего класса AppDelegate в навигационной программе, а bird_arr - объект NSMutableArray. Я хочу использовать строку, написанную в строке, которая нажата. Но objectAtIndex: возвращает тип id. У нас есть какой-либо способ изменить этот тип id на NSString или любым другим способом, с помощью которого я могу собирать строку внутри определенной строки?

4b9b3361

Ответ 1

yep, просто бросьте его

NSString *value = (NSString *)[appDelegate.bird_arr objectAtIndex:rowClicked];

Если вы хотите дважды проверить, что это действительно используется NSString

[someId isKindOfClass:[NSString class]]

Ответ 2

An id может быть указателем на любой объект, и он автоматически будет присвоен любому типу указателя объекта (например, void * в C). Код, который вы показываете, выглядит правильно. Нет необходимости в явном приведении, хотя вы можете добавить его, если хотите.

Если объект, который вы выбрали из массива, на самом деле не является NSString, вам нужно будет выполнить другую работу, чтобы получить нужный объект.

Ответ 3

"id type" просто говорит нам, что возвращаемое значение является объектом - ничего кроме этого. Это уже может быть объект NSString, иначе это может быть что-то другое. Если все объекты в этом массиве являются строками, ваша работа выполняется. Если они что-то еще, вам нужно каким-то образом получить что-то еще в строке.

Ответ 4

Предполагая, что объект является NSString, приведение в NSString * должно работать нормально:

NSString* value = (NSString*)[appDelegate.bird_arr objectAtIndex:rowClicked];

Ответ 5

литье может быть сделано для более безопасной стороны, но здесь не требуется. Я пробовал несколько вещей с кодом после кастинга и без кастинга, и все отлично работало. Идентификатор содержит ссылку и какой тип ссылки что-то делается во время выполнения, я полагаю. Однако я нашел еще один лучший способ получить текст в определенной строке в строчном формате. Я сделал это, используя метод cellForRowAtIndex: index. это вернет мне ячейку по указанному индексу, а затем с помощью свойства textLabel. Thanx для вашего ответа и помочь ребятам.