我是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的输入时,它以字符串格式存储。并将输出作为字符串返回。 如何克服它??
答案 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. ")
}
它利用Int
和Float
的初始化程序测试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
}