0

このviewControllerがあるとしましょう

public class DetailsViewController : UITableViewController
{
    public var text : String;
    public override func viewDidLoad ( )
    {
        // do something with text
    }
}

そして、セグエを介して前のコントローラーをプッシュするこの別のコントローラーがあります

public class MainViewController : UITableViewController
{
    ...

     public override func prepareForSegue ( segue : UIStoryboardSegue, sender : AnyObject? )
     {
         if ( segue.identifier == "detailsSegue" )
         {
             let selectPatientController = segue.destinationViewController as! DetailsViewController;
             selectPatientController.text = "I'm Iron Man";
         }
     }
}

MainViewController は DetailsViewController をインスタンス化しないため、「テキスト」が設定されることは保証できません。だから私はそれを「文字列?」と宣言することができますか?または「文字列!」。

  • "String?": ".text?" と書く必要があります。ビューでDidLoad。MainViewController がプロパティを設定しない場合、テキストが欠落しているビューが表示される可能性があります。

  • "String!": コードは単純ですが、MainViewController がプロパティを設定しないとアプリがクラッシュします。

エラーが発生した場合に最適なオプションはどれですか?不完全なビューを表示するか、クラッシュしてエラー ログを取得しますか? 最後の 1 つはユーザーにとって不快ですが、特に開発時のバグ追跡に役立ちます。

「String?」を使用するのが良い解決策だと思います。assert() を使用すると、アプリは開発時にのみクラッシュします。他の提案?

4

2 に答える 2

1

これが私がそれを行う方法です。

デフォルトのテキストを設定できる場合

public class DetailsViewController : UITableViewController
{
    public var text : String = "Default text or empty string" {
        didSet {
            //property was just changed so you can update your UI with new text
            //for example (you need to define this function yourself)
            self.updateWhenTextChanged()
        }
    }
    public override func viewDidLoad ( )
    {
        // do something with text
    }
}

デフォルトのテキストを設定できない場合

そのままにしておきますString?。それをアンラップするのは面倒かもしれませんが (Swift 2.0guardステートメントは大いに役立ちますが)、この方法でコードが安全であることを確認できます。

. String!_ 暗黙のうちにアンラップされた変数をすべて見つけて修正するのがどれほど大変なことか想像してみてください!

于 2015-06-25T00:56:16.393 に答える
0

? についての最初の考えに同意します。正しいアプローチだと思います。また、デフォルト パラメータに関する Andriy の提案も、該当する場合はすばらしいものです。

コードは、コード内で考えられるすべての状況を理解していることを示す必要があります。テキストがアクセスされる瞬間までに定義されるかどうか確信が持てない場合は、? にする必要があります。それを隠す理由はありません。これにより、他の開発者に起こりうる複雑さについて十分なガイダンスが提供されるため、開発者はコードを適切に操作できるようになります。ユーザーが不完全なデータで先に進むことができない場合でも、開発者はそのようなシナリオを処理し、ユーザーがアプリケーションを適切に終了できるようにすることができます。私は避けます!負の UX をもたらすだけでなく、後でデバッグするのが難しい実行時エラーの潜在的なポイントとして、すべてのコストがかかります。

于 2015-06-27T04:07:55.077 に答える