回答編集履歴

2 素数判定に誤りがあったので訂正。

sgr_ksmt

sgr_ksmt score 54

2015/09/15 23:44  投稿

おそらく、素数判定の最後のfor文で、Int(n!)で引っかかってエラーがでていると思われます。
こんな感じでどうでしょうか。
一度、if let 文を使って、textFieldのtextがあるかどうかと、文字列がIntに変換できるかを確認してから、
素数判定を走らせているので、判定文の中で、アンラップする必要もないです。
環境がわかりませんが、Swift1.2以上なら大丈夫かと思います。
素数判定は色々ありますが、daisuke-hanさんの書いてあるものそのまま(試し割り法)にしてあります
```Swift
   func isPrimeNumber(num: Int) -> Bool {
       if num < 2 {
           return false
       } else if num == 2 {
           return true
       }
       
       if num % 2 == 0 {
           return false
       }
       
       for var i = 3; i < num / i; i += 2 {
       for var i = 3; i * i <= num; i += 2 {
           if num % i == 0 {
               return false
           }
       }
       return true
   }
   
   @IBAction func Button1(sender: AnyObject) {
       if let text = Text1.text, number = Int(text) {
           Label1.text = isPrimeNumber(number) ? "素数です。" : "素数ではありません。"
       } else {
           Label1.text = "判定できませんでした。"
       }
   }
```
1 追記

sgr_ksmt

sgr_ksmt score 54

2015/09/15 19:17  投稿

おそらく、素数判定の最後のfor文で、Int(n!)で引っかかってエラーがでていると思われます。
こんな感じでどうでしょうか。
一度、if let 文を使って、textFieldのtextがあるかどうかと、文字列がIntに変換できるかを確認してから、
素数判定を走らせているので、判定文の中で、アンラップする必要もないです。
環境がわかりませんが、Swift1.2以上なら大丈夫かと思います。
素数判定は色々ありますが、daisuke-hanさんの書いてあるものそのまま(試し割り法)にしてあります  
```Swift
   func isPrimeNumber(num: Int) -> Bool {
       if num < 2 {
           return false
       } else if num == 2 {
           return true
       }
       
       if num % 2 == 0 {
           return false
       }
       
       for var i = 3; i < num / i; i += 2 {
           if num % i == 0 {
               return false
           }
       }
       return true
   }
   
   @IBAction func Button1(sender: AnyObject) {
       if let text = Text1.text, number = Int(text) {
           Label1.text = isPrimeNumber(number) ? "素数です。" : "素数ではありません。"
       } else {
           Label1.text = "判定できませんでした。"
       }
   }
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る