2017-05-24 4 views
1

Wer weiß, wie man dieses Problem umgehen kann. In der Zeile dateFormatter.string(from: date) gibt der Compiler an, dass "muting getter on immutable value" nicht verwendet werden kann.Lazy var in struct

struct viewModel { 

private lazy var dateFormatter = {() -> DateFormatter in 
    let formatter = DateFormatter() 
    formatter.dateFormat = "MM/dd/yyyy" 
    return formatter 
}() 

var labelText: String? { 
    let date = Date() 
    return dateFormatter.string(from: date) 
}} 

Ich verstehe, was in this Link geschrieben, aber die oben beschriebene Situation ist wahrscheinlich anders.

+2

Warum ist es in erster Linie faul? Brauchst du wirklich faul für das Erstellen eines Datumsformatierers? – Sweeper

+0

Lassen Sie uns einfach sagen, dass meine Struktur viele weitere Eigenschaften hat und das Erstellen von DateFormatter eine teure Operation ist, die ich möchte, dass sie faul ist. – OutOnAWeekend

+0

@AnandKumar Ist es, obwohl? – Alexander

Antwort

4

Sie benötigen einen mutierenden Getter, um Mutationen unter self durchzuführen (z. B. Zugriff auf eine Lazy-Variable).

struct ViewModel { 
    private lazy var dateFormatter = {() -> DateFormatter in 
     let formatter = DateFormatter() 
     formatter.dateFormat = "MM/dd/yyyy" 
     return formatter 
    }() 

    var labelText: String? { 
     mutating get { 
      let date = Date() 
      return dateFormatter.string(from: date) 
     } 
    } 
} 
+0

Das ist schlau (ich upvoted :-)), leider müssen alle 'Instanzen' einer solchen Struktur veränderbar sein, was kontraproduktiv sein könnte. In diesem Fall würde ich ViewModel lieber als Klasse – user3441734

+0

@ user3441734 definieren. Ich würde das auch tun, wenn ich faule Vars verwenden müsste. Aber dieser Fall braucht überhaupt keine faulen Vars. – Alexander