2015-05-03 3 views
4

Я получил это сообщение об ошибке с момента обновления моего xcode до 6.3. 1.Swift - метод '*()' с селектором Objective-C '*' конфликтует с getter для '*' из суперкласса 'NSObject' с тем же селектором Objective-C

/Users/MNurdin/Documents/iOS/xxxxx/Models/Message.swift:46:10: Method 'hash()' with Objective-C selector 'hash' conflicts with getter for 'hash' from superclass 'NSObject' with the same Objective-C selector 

Мой код

var hash_ : UInt 

func hash() -> UInt { 
     return UInt(hash_); 
    } 

Пожалуйста, советы. Спасибо.

+0

и что вам сказать? что метод, который вы пытаетесь определить, конфликтует с другим методом с тем же именем! Решение: выберите другое имя или приспособите тип возвращаемого значения, чтобы он был точным образом подходит для противоречивого метода, чтобы переопределить его. – luk2302

+0

Дубликат [Проблема с соответствием протоколу Objective-C из подкласса Swift NSObject] (http://stackoverflow.com/questions/28718577/issue-with-conforming-to-objective-c-protocol-from-swift-nsobject- подкласс)? –

ответ

4

Чтобы уточнить: @property(readonly) NSUInteger hash является объектом Objective-C NSObject, это означает, что для этой переменной создан геттер, а именно hash().

Теперь попробуйте определить метод с тем же именем и те же параметры (отсутствует), но с другим типом возвращаемого значения (UInt вместо NSUInteger, который был бы в стриже Int.). Поэтому вы получаете данную ошибку. Для того, чтобы решить эту проблему у вас есть два варианта сейчас:

  • изменить тип возврата к Int ->, который будет переопределить предопределенный хеш-функции
  • выбрать другое имя метода или добавить параметры
+0

Я не могу, он должен быть объявлен в UInt. Если нет, это не удовлетворяет протоколу. –

+0

Какой протокол он не удовлетворяет? У вас другая ошибка? – luk2302

+0

@ Dato'MohammadNurdin Это неправильно, это Int, а не Uint. (См. Мой ответ ниже.) –

4

См NSObjectProtocol декларация, где hash объявлен:

var hash: Int { get } 

у вас есть три проблемы:

  • hash является var, не func
  • тип является Int, не UInt.
  • вы не использовали ключевое слово override

Для решения этих проблем, используйте вместо этого:

override var hash : Int { 
    return /* (your hash logic) */ 
} 
Смежные вопросы

 Смежные вопросы