2016-04-13 17 views
1

したがって、SwiftとiOSアプリケーションの開発を開始してください。
犬の年齢を人間の年齢に変換する初心者のチュートリアルでしたか?は、タイプ 'int'にタイプ 'string'の値を割り当てることができません。

これは基本的に5歳以上の年齢に基づいていましたが、私は正確ではないと感じました。私は2つの質問がある

(したがって、すべての場合醜い他の条件):

  1. 年齢で同じ計算を行うが、すべての場合はelse文を最小化するための最良の方法は何ですか? Theresはより良い方法でなければなりません。

  2. 私が30年間持っている最後のif文は、dogAge変数に文字列を代入することになっています。私はintからstringにvarを変換する際に問題を抱えていますが、これまではさまざまなことを研究しています。

ありがとうございます!

import UIKit 

class ViewController: UIViewController { 

@IBOutlet weak var dogAgeTextField: UITextField! 

@IBOutlet weak var resultLabel: UILabel! 

@IBAction func reset(sender: AnyObject) { 
    resultLabel.text = " " 
    dogAgeTextField.text=" " 
} 
@IBAction func findAge(sender: AnyObject) { 

    var dogAge = Int(dogAgeTextField.text!)! 

    if (dogAge == 1){dogAge=15} 
    else if (dogAge == 2) {dogAge=24} 
    else if (dogAge == 3) {dogAge=29} 
    else if (dogAge == 4) {dogAge=34} 
    else if (dogAge == 5) {dogAge=38} 
    else if (dogAge == 6) {dogAge=42} 
    else if (dogAge == 7) {dogAge=47} 
    else if (dogAge == 8) {dogAge=51} 
    else if (dogAge == 9) {dogAge=56} 
    else if (dogAge == 10) {dogAge=60} 
    else if (dogAge == 11) {dogAge=65} 
    else if (dogAge == 12) {dogAge=69} 
    else if (dogAge == 13) {dogAge=74} 
    else if (dogAge == 14) {dogAge=78} 
    else if (dogAge == 15) {dogAge=83} 
    else if (dogAge == 16) {dogAge=87} 
    else if (dogAge == 17) {dogAge=92} 
    else if (dogAge == 18) {dogAge=96} 
    else if (dogAge == 19) {dogAge=101} 
    else if (dogAge == 20) {dogAge=105} 
    else if (dogAge == 21) {dogAge=109} 
    else if (dogAge == 22) {dogAge=113} 
    else if (dogAge == 23) {dogAge=117} 
    else if (dogAge == 24) {dogAge=121} 
    else if (dogAge == 25) {dogAge=125} 
    else if (dogAge == 26) {dogAge=dogAge*5} 
    else if (dogAge == 27) {dogAge=dogAge*5} 
    else if (dogAge == 28) {dogAge=dogAge*5} 
    else if (dogAge == 29) {dogAge=dogAge*5} 
    else if (dogAge >= 30) {var dogAge=String(UTF8String: "really old")!} 


    resultLabel.text = "Your dog is \(dogAge) in human years." 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

}

+0

24歳、29歳などの年齢番号を取得する方法はありますか?ここでループを使用する必要があります –

+5

intに文字列を割り当てることはできません。 – ryantxr

+0

年齢については、私はこのページの一番下にある年齢層を参照しています:http://www.dogyearschart.com/乗数は年齢によって異なるようです。 – bigjimcfh

答えて

1

問題は、式全体が犬/人年マッピングするために、配列を使用して簡略化することができInt

として宣言された変数にStringを割り当てることができませんです。

let dogToHuman = [0, 15, 24, 29 ... 140, 145] // complete the array with the missing values 

if let dogAge = Int(dogAgeTextField.text!) { 

    let humanAge : String 

    if dogAge >= 30 { 
    humanAge = "really old" 
    } else { 
    humanAge = String(dogToHuman[dogAge]) 
    } 
    resultLabel.text = "Your dog is \(humanAge) in human years." 
} else { 
    resultLabel.text = "The input is not an integer" 
} 
+0

あなたがそれを変更しているので、humanAgeは 'var'である必要があります。 – ryantxr

+3

@ryantxrいいえ、変数が一度初期化され、後で変更されないことが保証されている場合は、 'let' – vadian

1
  1. 年齢で同じ計算を行うが、すべての場合はelse文を最小化するための最良の方法は何ですか? Theresはより良い方法でなければなりません。

一つの素朴な実装では、各1のインデックスは、人間の年に対応する配列、で犬の年の値のすべてを置くことです。例えば、

let humanYears = [0, 15, 24, 29, 34, 38, 42, 47, 51, 56, 60, 65, 69, 74, 78, 83, 87, 92, 96, 101, 105, 109, 113, 117, 121, 125] 
let humanAgeString: String 

if 1 <= dogAge && dogAge < 26 { 
    humanAgeString = "\(humanYears[dogAge])" 
} else if 26 <= dogAge && dogAge < 30 { 
    humanAgeString = "\(dogAge * 5)" 
} else if dogAge >= 30 { 
    humanAgeString = "really old!" 
} else { // negative values or 0? 
    humanAgeString = "impossible to calculate" 
} 

resultLabel.text = "Your dog is \(humanAgeString) in human years." 

注アレイの残りの部分は1系となるように配列インデックス0は、ちょうど0であること。

もう少し上品に計算する数式を考え出すことができますが、この特定の問題のセットでは、過剰なもののようです。

私が30年間持っている最後のif文は、dogAge変数に文字列を代入することになっています。私はintからstringにvarを変換する際に問題を抱えていますが、これまではさまざまなことを研究しています。

だけ"Dog age: \(dogAge)"ように、インライン文字列変数置換を使用し、StringIntを置くこと。あなたはがこれを計算したい場合は

は、それはあなたの時にかなり良い近似x <= 20を与える5x + (15 - floor(x/2))のように見えます。

関連する問題