2016-07-13 12 views
3

Я могу использовать отладчик, чтобы видеть значения в памяти везде в моем приложении, кроме одного класса. Каждый раз, когда я стараюсь, независимо от того, какое значение я пытаюсь po, я получаю то же сообщение об ошибке:Невозможно использовать отладчик Swift в одном файле класса

(lldb) po searchInstitution.name 
error: <EXPR>:2:1: error: cannot convert value of type 'Int' to expected argument type 'Device' 
searchInstitution.name 
^~~~~~~~~~~~~~~~~ 
<EXPR>:15:7: error: cannot convert value of type 'Int' to expected argument type 'Device' 
    if (1==1) {           
    ^

Device является структура в файле с этим определением:

private struct Device: Hashable { 
    let type: String 
    let mask: String 

    var hashValue: Int { 
     return type.hashValue^mask.hashValue 
    } 
} 

private func ==(lhs: Device, rhs: Device) -> Bool { 
    return lhs.type == rhs.type && lhs.mask == rhs.mask 
} 

Но это не имеет ничего для выполнения строкового свойства экземпляра класса SearchInstitution, который я пытаюсь проверить.

Кто-нибудь видел что-нибудь подобное? Любые идеи о том, что мне может понадобиться изменить, чтобы исправить это? Это делает отладку чрезвычайно проблематичной.

+0

Я бы написал отчет об ошибке на этом – Feldur

ответ

4

Это известная ошибка. Конфликт с «if (1 == 1)» в коде, который использует выражающий парсер для обертывания вашего выражения, исправлен в github lldb (путем переключения на «do» - который не был доступен, когда этот код был впервые записан. .), и должен сделать это в следующем выпуске официальных инструментов.

Если вы хотите обойти это время, просто сделайте свой оператор == публичным, а не частным. Оценщик выражений пытался заставить приоритет локальных частных определений над потенциально конфликтующими глобальными и не делал этого правильно, так что ТОЛЬКО был обнаружен частный локальный.

Обратите внимание, что более общая ошибка еще не исправлена, поэтому, если вы фактически используете частный оператор в контексте, где он виден, ТОЛЬКО это определение оператора будет использоваться.

+0

Спасибо, это сработало! –