知道Swift中的数据类型

时间:2017-02-17 06:33:49

标签: swift types

Task我是swift的新手,我刚开始讲基础知识。在其中一个博客中,我看到一个简单的任务,就像这样从stdin中读取一行并检查它是否是整数,浮点数,字符串。

我尝试使用以下代码

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. " }
}

当给出3245的输入时,它以字符串格式存储。并将输出作为字符串返回。 如何克服它??

3 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分: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. ")
}

它利用IntFloat的初始化程序测试String的有效性的能力,这几乎完全违背了本练习的目的。但是嘿,它有效,对吗?

答案 2 :(得分:-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

}