#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
?