2017-08-16 2 views
0

ビューコントローラー1のボタンからビューコントローラー2のラベルに整数を追加できます。別のswiftファイルで数値を渡そうとしています。 私はこれに適切なコードがあると思ったが、数字はtotalSumLabelに一緒に追加されていません。 はX-cideによって強制されます。それなしに私はエラーを取得する:異なるビューコントローラーで整数を追加する

class ViewController1: UIViewController { 
var myTotal: addPrice? 


@IBAction func button1(_ sender: UIButton) { 
    myTotal?.allSum += 190 
    } 
@IBAction func button2(_ sender: UIButton) { 
    myTotal?.allSum += 240 
    } 

ビューコントローラからコード2:

ビューコントローラから

inport UIKit 


class addPrice: NSNumber { 
var allSum: Int = 0 
} 

コード1 "initは(記述)initに改名されました"

class ViewController2: UIViewController { 
var myTotal: addPrice? 

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
    totalSumLabel.text = String (describing: myTotal?.allSum) 
+0

どのようにviewController1からviewController2にナビゲートしていますか? seguesを使用している場合、 'prepareForSegue'に' viewController2.myTotal = myTotal'を設定することができます。 –

+0

私はあなたの目的のためにあなたの財産の価値を保存するサービスを使用することをお勧めします。あなたのクラスaddPriceを呼び出すことも良い考えではありません。 – Kingalione

+0

なぜあなたはクラスを作成していますか? 'var allSum:Int = 0'を初期化するだけで、プロジェクト全体でそれを得ることができます。実際には、その良い方法はわかりませんが、私はしなければなりません。いずれかの人にこのメソッドの提案がある場合は、私に知らせてください。 –

答えて

0

私はこのようなサービスを実装します:

import Foundation 
import UIKit 

class DataFactory { 

    var allSum:Int = 0 

    static let sharedInstance : DataFactory = { 
     let instance = DataFactory() 
     return instance 
    }() 

} 

そして、あなたはこのように、すべてのViewControllerから、あなたのプロパティ値を取得できます。

let allSum = DataFactory.sharedInstance.allSum 

それともどこからでもこのようなあなたのプロパティを設定します。

DataFactory.sharedInstance.allSum += 1 

そのない特定のグローバルプロパティを保存することをお勧めViewControllers

+0

シングルトンを使用して状態を保存することは一般的には良い考えではありません。 OPはおそらく、ViewController間で 'DataFactory'のインスタンスを渡すことを望んでいます – Jeremy

+0

なぜプロパティを格納するオブジェクトのインスタンスを渡すのではなく、グローバルプロパティをSingletonsに格納するのは良い考えですか? – Kingalione

+0

'sharedInstance'がアクセス/変更されるドメインを制御する方法はありません。 OPは、 'allSum'がapp-globalプロパティであるとは言わず、2つのViewController間で共有する必要があります。 – Jeremy

関連する問題