Ich habe eine Struktur mit einem fehlbaren Initialisierer, keine Instanzmethode, sondern ein Initialisierer. Nach der Aktualisierung auf 1.2, wenn ich versuche, eine let
Eigenschaft innerhalb des Initialisierers zuzuweisen, erhalte ich den folgenden Fehler Cannot assign to 'aspectRatio' in self
. Mein Code unter:Zuweisen von Variable im fehlbaren Initializer Swift 1.2
import Foundation
public struct MediaItem
{
public let url: NSURL!
public let aspectRatio: Double
public var description: String { return (url.absoluteString ?? "no url") + " (aspect ratio = \(aspectRatio))" }
// MARK: - Private Implementation
init?(data: NSDictionary?) {
var valid = false
if let urlString = data?.valueForKeyPath(TwitterKey.MediaURL) as? NSString {
if let url = NSURL(string: urlString as String) {
self.url = url
let h = data?.valueForKeyPath(TwitterKey.Height) as? NSNumber
let w = data?.valueForKeyPath(TwitterKey.Width) as? NSNumber
if h != nil && w != nil && h?.doubleValue != 0 {
aspectRatio = w!.doubleValue/h!.doubleValue
valid = true
}
}
}
if !valid {
return nil
}
}
struct TwitterKey {
static let MediaURL = "media_url_https"
static let Width = "sizes.small.w"
static let Height = "sizes.small.h"
}
}
Meine Frage ist, was mache ich, um das zu beheben?
Ist dies nicht nur, weil Sie eine unveränderliche Variable haben (mit 'let') und Sie zuweisen es zweimal (einmal in der Initialisierer - 0, und ein anderes Mal im Konstruktor) - funktioniert es, wenn Sie nur ihm im Konstruktor zuweisen und 0 in einem 'else' zuweisen? –
mögliches Duplikat von [Swift 1.2 Zuweisenlassen nach Initialisierung] (http://stackoverflow.com/questions/29564272/swift-1-2-assigning-let-after-initialization) – ravron
@Benjamin, ich bekomme jetzt 'self wird verwendet, bevor alle gespeicherten Eigenschaften initialisiert werden, nachdem die else-Anweisung hinzugefügt und der Initialisierer entfernt wurde. – jason328