Yeni projemde MVVM desenini kullanmaya çalışıyorum. İlk kez tüm görüş modelimi yapıya hazırladım. Ancak, kapatmalarla birlikte fetchDataFromNetwork gibi async iş mantığını uyguladığımda, kapaklar eski görünüm model değerini yakalar ve ardından bu şekilde güncelleştirilir. Yeni bir görünüm modeli değeri değil. İşte Swift: ViewModel bir yapı mı yoksa sınıf mı olmalı?
oyun alanında bir test kodudur.import Foundation
import XCPlayground
struct ViewModel {
var data: Int = 0
mutating func fetchData(completion:()->()) {
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: "http://stackoverflow.com")!) {
result in
self.data = 10
print("viewModel.data in fetchResponse : \(self.data)")
completion()
XCPlaygroundPage.currentPage.finishExecution()
}.resume()
}
}
class ViewController {
var viewModel: ViewModel = ViewModel() {
didSet {
print("viewModel.data in didSet : \(viewModel.data)")
}
}
func changeViewModelStruct() {
print("viewModel.data before fetch : \(viewModel.data)")
viewModel.fetchData {
print("viewModel.data after fetch : \(self.viewModel.data)")
}
}
}
var c = ViewController()
c.changeViewModelStruct()
Konsol sınıfa, didSet aramadı ViewModel değişti ama viewController Görünüm Modeli varsa
viewModel.data before fetch : 0
viewModel.data in didSet : 0
viewModel.data in fetchResponse : 10
viewModel.data after fetch : 0
sorun yeni Değerini 10.
yok viewController Görünüm Modeli olduğunu yazdırır yeni Değer 10.
Yani zaman uyumsuz API çağrısı @Code ile yapı kullanma yolu yoktur? Çünkü yapıyı sınıftan daha çok kullanmayı tercih ediyorum. – Paul
@Paul Gönderiyi düzenledim (tekrar). – Code
Evet, bu kötü bir tasarım. :(Bu durumda dersi kullanmalıyım.Çok teşekkürler @Code. – Paul