Ich habe das folgende Stück Code, das Protokoll MyDisplayable
hat drei optionale String
s, und ich habe eine Standard-Implementierung des Protokolls über die Erweiterung. Meine Frage ist, da ich sicher bin, dass die Erweiterung die drei Strings zurückgibt, gibt es eine Möglichkeit, sie als nicht-optional zu verwenden, und besteht irgendein Risiko, wenn eine andere Implementierung sie überschreibt? (Siehe die Frage Punkte 1 und 2 in Code unten)Swift Protokoll Standard-Implementierung für optionale Readonly Variablen
Vielen Dank!
protocol MyDisplayable {
var displayName: String? { get }
var shortDescription: String? { get }
var longDescription: String? { get }
}
protocol MyObject : MyDisplayable, CustomStringConvertible {
}
extension MyObject {
var displayName: String? {
return "noname"
}
var shortDescription: String? {
return "something can't be described"
}
var longDescription: String? {
return "no way to describe it further"
}
var description: String {
// **1. is there a way to use the strings as if they are non-optional?**
// **2. is it a problem if another class implements the protocol and returns `nil` for any of the strings, but here they are force unwrapped?**
return "\(displayName!): \(shortDescription!)\n\(longDescription!)"
}
}
class Something : MyObject {
}
let something = Something()
print("Something: \(something)")
Wenn ich du wäre würde ich solche Dinge nicht komplizieren; und anstatt dieses spezielle Problem zu lösen, finden Sie besser einen anderen Weg, um Ihr Ziel zu erreichen. Sich mit einem Knall herumzuhacken, macht manchmal die Sache schlimmer, zusätzlich dazu, dass der Compiler schwerer ist. Vielleicht könntest du * ohne * 'MyObject' machen und hast einfach nicht-optionale Strings in' MyDisplayable' mit den vorgegebenen Standardwerten. – user1244109