2016-09-12 2 views
2

J'utilise maintenant Xcode 8 GM (Version 8.0 (8A218a)) avec Swift 3, mon repo est: https://github.com/yeahdongcn/UIColor-Hex-Swift/tree/Swift-3.0 après avoir converti la syntaxe Swift 2 en Swift 3, I mettre deux points d'arrêt dans le getter suivant puis j'ai exécuté le test, le premier n'est pas appelé, mais la deuxième debugDescription est appelée.open override var description: Chaîne non appelée dans Swift 3

open override var description: String { 
    return self.hexString(true) 
} 

open override var debugDescription: String { 
    return self.hexString(true) 
} 

J'ai créé une aire de jeux, il fonctionne de la même

//: Playground - noun: a place where people can play 

import UIKit 

extension UIColor { 
    public func hexString(_ includeAlpha: Bool) -> String { 
     var r: CGFloat = 0 
     var g: CGFloat = 0 
     var b: CGFloat = 0 
     var a: CGFloat = 0 
     self.getRed(&r, green: &g, blue: &b, alpha: &a) 

     if (includeAlpha) { 
      return String(format: "#%02X%02X%02X%02X", Int(r * 255), Int(g * 255), Int(b * 255), Int(a * 255)) 
     } else { 
      return String(format: "#%02X%02X%02X", Int(r * 255), Int(g * 255), Int(b * 255)) 
     } 
    } 

    open override var description: String { 
     return self.hexString(true) 
    } 

    open override var debugDescription: String { 
     return self.hexString(true) 
    } 
} 

let color = UIColor.yellow 
color.description 
color.debugDescription 

enter image description here

Répondre

1

Vous ne pouvez pas remplacer une méthode dans une extension. Vous auriez besoin d'utiliser une sous-classe. Le compilateur devrait se plaindre.

Cela a peut-être fonctionné dans Swift 2.x, mais ce comportement n'était pas correct.