2016-10-06 1 views
0

Swift를 사용하여 웹 서비스에 게시 할 때 데이터를 검색하는 데 어려움을 겪고 있습니다. 내가 얻는 것은 실제 문자가 아니라 반환 할 문자 수입니다. 나는 그들이 거기에 있어야한다고 생각한다, 나는 단지 그들을 찾아내는 방법을 모른다.Swift에서 웹 문자열 검색

여기 내 스위프트 3 코드 :

let url: NSURL = NSURL(string: "http://www.nanorig.dk/api/login")! 
    let request:NSMutableURLRequest = NSMutableURLRequest(url:url as URL) 

    let bodyData = "data=something" 
    request.httpMethod = "POST" 

    request.httpBody = bodyData.data(using: String.Encoding.utf8); 
    NSURLConnection.sendAsynchronousRequest(request as URLRequest, queue: OperationQueue.main) 
    { 
     (response, data, error) in 
     print("response: \(response)") 
     print("data: \(data)") 
     print("error: \(error)") 
    } 

이 코드를 실행하면, 나는 다음과 같은 출력을 얻을 :

response: Optional(<NSHTTPURLResponse: 0x174225400> { URL: http://www.nanorig.dk/api/login } { status code: 200, headers { 
"Accept-Ranges" = bytes; 
Age = 0; 
"Cache-Control" = "no-store, no-cache, must-revalidate, post-check=0, pre-check=0"; 
Connection = "keep-alive"; 
"Content-Encoding" = gzip; 
"Content-Length" = 85; 
"Content-Type" = "text/html; charset=UTF-8"; 
Date = "Thu, 06 Oct 2016 13:15:18 GMT"; 
Expires = "Thu, 19 Nov 1981 08:52:00 GMT"; 
Pragma = "no-cache"; 
Server = Apache; 
"Set-Cookie" = "PHPSESSID=6so30t6brvj6j5k03kihr1m1f5; path=/"; 
Vary = "Accept-Encoding"; 
Via = "1.1 varnish-v4"; 
"X-Powered-By" = "PHP/5.6.26"; 
"X-Varnish" = 159701416; 
} }) 
data: Optional(45 bytes) 
error: nil 
2016-10-06 15:15:19.428231 NanOrig[2245:1192962] [MC] System group container for systemgroup.com.apple.configurationprofiles path is /private/var/containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles 
2016-10-06 15:15:19.436932 NanOrig[2245:1192962] [MC] Reading from public effective user settings. 

공지 사항, 특히, 위의 다음 줄을 :

data: Optional(45 bytes) 

서버에서 실행되는 방법은 간단한 PHP 줄입니다 :

echo 'just a test string to return to the swift app'; 

...이 45 자입니다 ...

그래서, 내가 그것을 보는 방법은 "데이터"어떻게 든 반향되는 것을 포함한다 변수; 문자의 수를 어떻게 알 수 있습니까? 나는 그 (것)들을 얻는 방법을 모른다, 나는 나가 생각할 수있는 모두를 시도했다 (변수에있는 메서드 호출을 가하고, 뭔가 다른 것에 데이터 값을 할당하고, 문자열로 캐스팅하고, toString 메서드를 찾는다. 인터넷에서 완전히 다른 코드 스 니펫을 시도해도 같은 문제가 발생했습니다.

간단한 GET 요청으로 서버에서 문자열을 반환하는 응용 프로그램의 코드가 있지만 POST가되어야합니다. 작동하지 않는 것으로 보아 아직 아무것도 게시하지 않았습니다.

나는 누군가가 나에게 무슨 일이 일어나는지 말해 줄 수 있었으면 좋겠다.

답변

0

NSString(data: data, encoding: NSUTF8StringEncoding)을 사용하면 쉽게 해당 데이터를 NSString으로 전송할 수 있습니다. (이것은 failable initialiser처럼)

는 다음을 수행, 결과 문자열 랩을 해제하려면 :

if let unwrappedDataString = dataString { 
    // Do things with the unwrapped string. 
} 

편집 :

완벽하게, 당신이 쓰기 다음을 사용합니다. 귀하의 의견에 따라 데이터를 푸시해야합니다. 어떤 이유로 든 데이터가 존재하지 않으면 앱이 다운됩니다.

if let unwrappedData = data { 
    if let dataString = NSString(data: unwrappedData, encoding: String.encoding.utf8.rawValue) { 
      // Do stuff 
    } 
} 
+0

리팩토링 후 완벽하게 작동합니다. NSString (data : data!, encoding : String.Encoding.utf8.rawValue); 옵션으로 반환되는 stille입니다 (실제 문자열) - 그 이유는 무엇인지/어떻게 없앨 수 있습니까? 나는 허용 할 때 5 분 안에 대답을 수락 할 것입니다. – Henry

+0

이것을 반영하기 위해 제 대답을 수정했습니다. ;) –

+0

그건 그냥 멋지다! 고마워요, 킹. 그리고 무료 버그 수정으로 항상 좋은 곳입니다 – Henry