2017-02-17 1 views
0

Task 저는 신속한 초보자입니다. 기초부터 시작했습니다. 블로그 중 하나에서 나는 stdin에서 한 줄을 읽고 그것이 정수인지, float인지, String인지를 체크하는 간단한 작업을 보았다. 3245의 입력이 문자열 포맷으로 저장 주어질 때스위프트의 데이터 유형을 알고 있습니다.

다음 코드

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

당신은 readLine 기능 유형 String?의 값을 반환

+2

이 내용은 해당 질문에 적용되지 않습니다. – rmaddy

+0

설명해 주시겠습니까? – Ram

+1

질문과 다른 대답을 읽어야 질문에 대한 답변이없는 이유를 확인해야합니다. – rmaddy

1

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 

}으로 객체의 유형 찾을 수 있습니다. 따라서 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

줄을 시도 할 때 줄을 시도 할 때 = 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의 유효성을 테스트 할 수 IntFloat의 이니셜 라이저의 기능을 이용한다. 그러나 헤이, 그것은 작동한다, 그렇지?

+2

's.hasPrefix ("")'의 목적은 무엇입니까? 그것은 모든 문자열에 대해 사실이어야합니다. 아니면's.hasPrefix ("\" ")'를 의미 했습니까? –

+0

@MartinR 확실 해요 :) – Alexander

관련 문제