Может ли Xcode LLDB отслеживать переменную Object-C в Swift?

#ios #swift #xcode

Вопрос:

У меня есть класс, суперкласс которого-UIScrollView, вот так:

 class MailSendContainerView: UIScrollView {

}
 

но когда я использую свой Xcode LLDB, чтобы наблюдать за изменением его кадра, я получил такую ошибку:

  watch set var -w write self.scrollContainer.frame
error: "frame" is not a member of "(MailSDK.MailSendContainerView) self.some.scrollContainer"
 

Интересно , не потому ли это, что фрейм UIView-это a CGRect , который является структурой.

Кто-нибудь может сказать мне, почему, и есть ли какой-нибудь способ посмотреть это? Спасибо.

Swift 5.5 Xcode 12.5

Редактировать

Я просто попытался посмотреть a CGRect , таким образом, я получил сообщение об ошибке, указывающее, что размер CGRect слишком велик для просмотра. Поэтому я попытался посмотреть структуру, в которой есть только Int свойство, и все в порядке. Также нормально наблюдать за компонентом CGRect , таким как origin.x , как сказал @Caleb.

Поэтому я думаю, что проблема не в его типе. И поскольку я также не могу следить за переменной view в a viewController , которая выдает ошибку типа cannot find variable name 'view' in this frame «Я думаю , что это что-то о наследовании или объекте-C»? Но я не уверен.

Все еще нужны ответы, спасибо!

Ответ №1:

Я задаюсь вопросом, не потому ли это, что фрейм UIView является CGRect, который является структурой.

Ошибка, которую вы видите, связана с тем, что UIView у нее нет frame переменной экземпляра; frame это свойство, т. е. метод, который вычисляет прямоугольник кадра и возвращает его. Попробуйте проверить UIView экземпляр в отладчике и посмотрите на его переменные экземпляра; вы не найдете ни одного с именем frame или _frame .

Но я думаю, что ваше предположение также верно: IIRC отладчик будет жаловаться, если вы попытаетесь просмотреть структуру или что-либо еще, что не является собственным типом. Один из способов обойти это, особенно для таких небольших объектов , как a CGRect , — просто следить за значениями компонентов, такими как origin.x , origin.y , width , и height вместо этого.

Комментарии:

1. Привет @Калеб, спасибо за твой ответ. Из-за ограничения характера комментария, поэтому я добавляю его в проблему, вы можете посмотреть, если хотите. И я думаю о frame том , что на самом деле я могу использовать addObserver , чтобы наблюдать за его изменениями , и это свойство также может быть задано напрямую a.frame = ... , и я ищу реализацию фрейма, но ничего не нахожу, поэтому мне интересно, что вы имеете в виду, когда говорите frame «вычисляется»? Я что-то неправильно понял? Еще раз спасибо за ваши ответы! 🙂

2. Вы имели в виду, что frame это на самом деле от CALayer ?