2017-02-17 6 views
0

Task私はスピーディーに新しいです。ブログの1つで、私はstdinから行を読んで、それが整数、浮動小数点、文字列かどうかをチェックするような簡単なタスクを見た。 3245の入力は、それが文字列形式で格納与えられたときスウィフトのデータ型を知る

Iは、次のコード

let input = readLine() 
var result = test(input) 
print (result) 
func test (obj:Any) -> String { 

    if obj is Int { return "This input is of type Intger." } 
    else if obj is String { return "This input is of type String." } 
    else { return "This input is something else. " } 
} 

と試みました。出力を文字列として返します。 それを克服する方法..?

答えて

-2

if let intt = obj as? Int { 
     // obj is a String. Do something with intt 
    } 
    else if let str = obj as? String { 
     // obj is a String. Do something with str 
    } 
    else { 
    //obj is something else 

}

+2

これは問題のコードには該当しません。 – rmaddy

+0

あなたはお礼を説明してください。 – Ram

+1

あなたはあなたの答えが質問されている質問と何の関係もない理由を知るために、質問と他の回答を読む必要があります。 – rmaddy

1

readLine関数はタイプString?の値を返すようにあなたがオブジェクトのタイプを見つけることができます。つまり、input変数はStringにしかなりません。それは決してIntまたは何か他のものではありません。

入力した値が有効な数値かどうかを確認するには、文字列をIntに変換してみます。他の人が指摘したように

if let input = readLine() { 
    if let num = Int(input) { 
     // the user entered a valid integer 
    } else { 
     // the user entered something other than an integer 
    } 
} 
+0

私は両方のソリューションを試してみましたが、すべてのケースでそうではなく、1つのケースを扱っています – remyr3my

+0

どういう意味ですか?具体的にする。 – rmaddy

+0

私は行をしようとするときにnum = Int(入力)Int64のための警告の過負荷を表示するInt、Floatなどのパラメータリストがある – remyr3my

0

は、readline()は常にString?返します。それをあなたがそれを使うどのようなフォーマットにも解釈するのはあなた次第です。

これは私がこれを行う方法は以下のようになります

let line = readLine() 

switch line { 
    case let s? where Int(s) != nil: 
     print("This input is of type Intger.") 

    case let s? where Float(s) != nil: 
     print("This input is of type Float.") 

    case let s? where s.hasPrefix("\"") && s.hasSuffix("\""): 
     print("This input is of type String.") 

    default: print("This input is something else. ") 
} 

それはほぼ完全にこの演習の目的に反しStringの妥当性をテストするIntの能力とFloatの初期化子を、利用しています。しかし、ねえ、それはうまくいくのですか?

+2

's.hasPrefix(" ")'の目的は何ですか?それはすべての文字列に当てはまるはずです。または、あなたは 's.hasPrefix(" \ "") 'を意味しましたか? –

+0

@MartinR確かに:) – Alexander

関連する問題