2015-06-21 39 views
6

當我嘗試在我的xcode項目中構建一個對象時,出現一個編譯器錯誤。這是代碼:在Swift上重寫NSObject的描述方法

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
  • descriptionNSObjectProtocol的(計算)屬性,而不是方法。
  • 其Swift視圖返回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