2015-06-21 4 views
6

Я получаю одну ошибку компилятора при попытке создать один объект в моем проекте xcode. Это код:Переопределение метода описания в NSObject on swift

import UIKit 

class Rectangulo: NSObject { 

    var ladoA : Int 
    var ladoB : Int 
    var area: Int { 
     get { 
      return ladoA*ladoB 
     } 
    } 

    init (ladoA:Int,ladoB:Int) { 

     self.ladoA = ladoA 
     self.ladoB = ladoB 
    } 

    func description() -> NSString { 
       return "El area es \(area)" 
    } 
} 

Ошибка времени компиляции:

Rectangulo.swift:26:10: Method 'description()' with Objective-C selector 'description' conflicts with getter for 'description' from superclass 'NSObject' with the same Objective-C selector 

Что мне нужно сделать, чтобы отключить эту функцию без проблем?

+0

вам это нужно, чтобы быть подклассом NSObject ли? Если вам это не нужно, тогда у вас не будет проблемы с переопределением описания. – Arbitur

+0

Да, мне нужно, это пример – jgd

+0

http://swiftstub.com/803133613/ Это прекрасно работает ... – Arbitur

ответ

12
  • description - (вычислимое) имущество NSObjectProtocol, а не способ.
  • Его быстрый вид возвращает String, а не NSString.
  • Поскольку вы переопределяете свойство суперкласса, вы должны явно указать override.

Вместе:

// main.swift: 
import Foundation 

class Rectangulo: NSObject { 

    var ladoA : Int 
    var ladoB : Int 
    var area: Int { 
     get { 
      return ladoA*ladoB 
     } 
    } 

    init (ladoA:Int,ladoB:Int) { 

     self.ladoA = ladoA 
     self.ladoB = ladoB 
    } 

    override var description : String { 
     return "El area es \(area)" 
    } 
} 

let r = Rectangulo(ladoA: 2, ladoB: 3) 
print(r) // El area es 6 
+1

С помощью этого кода во время компиляции я получаю следующую проблему: во-первых, последовательные объявления в строке должны быть разделены символом ';'. Решено, я получаю «Не могу переопределить с сохраненным описанием свойства». – jgd

+0

@jgd: Какую версию Xcode вы используете? Я проверил код с Xcode 6.3.2, и он работал, как ожидалось. –

+0

тот же Xcode 6.3.2 – jgd