1. ホーム
  2. swift

[解決済み] クラス 'ViewController' は swift で初期化されません。

2022-07-28 11:44:12

質問

このような操作をすると、コンパイラから苦情が来る。

class ViewController: UIViewController {

    var delegate : AppDelegate
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        //self.appDelegate = UIApplication.sharedApplication().delegate;

    }

    @IBAction func getData(sender : AnyObject) {

    }

    @IBAction func LogOut(sender : AnyObject) {
    }
}

しかし、単に ? の末尾に AppDelegate を以下のように変更すると、エラーは解消されます。

class ViewController: UIViewController {

    var delegate : AppDelegate?
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        //self.appDelegate = UIApplication.sharedApplication().delegate;

    }

    @IBAction func getData(sender : AnyObject) {

    }

    @IBAction func LogOut(sender : AnyObject) {
    }
}

には optional のキーワードは、私が間違っていない限り、このエラーに関連しています。

どのように解決するのですか?

エラーは改善されましたが、最初のバージョンの問題は、メンバー変数を持っていることです。 delegate があり、それがデフォルト値を持っていないことです。Swiftのすべての変数は常に値を持っている必要があります。つまり、あなたが持っていないイニシャライザーでそれを設定する必要があるか、インラインでデフォルト値を提供することができます。

オプションにすると、それを許容するのは nil になるようにし、明示的に値を与えたり初期化したりする必要がなくなります。