在swift上覆盖NSObject中的描述方法

时间:2015-06-21 17:11:45

标签: xcode swift

当我尝试在xcode项目中构建一个对象时,我遇到了一个编译器错误。这是代码:

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

在没有问题的情况下覆盖此功能需要做些什么?

1 个答案:

答案 0 :(得分:17)

  • 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