2017-02-17 8 views
0

Task Я новичок в быстром, я только начал с основ. В одном из блогов я увидел простую задачу, которая похожа на это, читает строку из stdin и проверяет, является ли она целым числом, float, String.знаю тип данных в Swift

Я попытался с помощью следующего кода

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 дается он хранит в строчном формате. и возвращает вывод как строку. как его преодолеть ..?

ответ

-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

Я пробовал оба решения его работы один случай, а не для всех случаев – remyr3my

+0

Какие случаи вы имеете в виду? Быть конкретной. – rmaddy

+0

, когда я пытаюсь использовать строку, если пусть num = Int (input), это показывает мне предупреждения о перегрузках для 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. ") 
} 

Он использует способность Int и Float «ы инициализаторах, чтобы проверить действительность String, которая почти полностью побеждает цель этого упражнения. Но эй, это работает, верно?

+2

Какова цель 's.hasPrefix (" ")'? Это должно быть верно для всех строк. Или вы имели в виду 's.hasPrefix (" \ "") '? –

+0

@MartinR Я уверен, что сделал :) – Alexander