2016-10-28 14 views
0

このプロジェクトでは、私のアプリケーションにウェブページ(weather-forecast.com)のセクションを表示しようとしています。私は 'webContent'にhtmlコンテンツをダウンロードし、componentsSeparatedByStringを使用して、文字列の配列にhtmlコードを分割してから、私のアプリケーションに必要なインデックスを取得します。この部分は 'websiteArray 1'にあり、この値は文字列「ほとんど乾燥しています。非常に軽度です(土曜日の午後は最大17 ° C、金曜日は最低8 ° C)。サン・ナイトによるESE)。 °の代わりに& degが含まれており、文字列ByReplacingOccurrencesOfStringを使用して&°を°で置き換えようとしています。私はこのメソッドを文字列で呼び出すことはできませんが、NSStringだけでNSStringに文字列を変換しようとしましたが、現在は "[String] NSStringに変換できません"というエラーが表示されています。NSStringメソッドの問題、swiftのstringByReplacingOccurrenceOfStringを使用している問題

NSStringの配列やstringByReplacingOccurrenceOfStringメソッドを使用する別の方法に変換する方法については、誰でも正しい方向に向けることができますか?

let url = NSURL(string: "http://www.weather-forecast.com/locations/London/forecasts/latest")! 

     let task = NSURLSession.sharedSession().dataTaskWithURL(url) { (data, response, error) -> Void in 

      if let urlContent = data { 

       let webContent = NSString(data: urlContent, encoding: NSUTF8StringEncoding) 

       let websiteArray = webContent?.componentsSeparatedByString("3 Day Weather Forecast Summary:</b><span class=\"read-more-small\"><span class=\"read-more-content\"> <span class=\"phrase\">") 



       if websiteArray?.count > 0{ 
        //print(websiteArray![1]) 
        var weatherArrayWithDeg = websiteArray![1].componentsSeparatedByString("</span>") 

        // Need to convert to NSString to use stringByReplacingOccurenceOfString, want to separate '$deg;' for ' °' 
        let weatherArray = (weatherArrayWithDeg as NSString).stringByReplacingOccurrencesOfString("&deg;", withString: " °") 

        print(weatherArrayWithDeg[0]) 
       } 

      } 
     } 

     task.resume() 

enter image description here

+0

あなたの質問に直接答えはありませんが、 "°"は "HTML/XMLエンティティ"ですので、参考にしてください:http://stackoverflow.com/questions/25607247/how-do-i-decode- html-entities-in-swiftを使用します。 –

+0

'weatherArrayWithDeg'は文字列の*配列*です。 –

+0

weatherArrayWithDegが文字列ではないのはなぜですか?私はwebsiteArrayのインデックス1を使用しているので – Talcicio

答えて

0
あなたの質問とは対照的に、私はあなたの問題を解決することを選ぶでしょう

extension String { 

    func convertFromHTML() -> String? { 

     if let htmldata = self.data(using: String.Encoding.utf8), let attributedString = try? NSAttributedString(data: htmldata, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil) { 
      return attributedString.string 
     } 

     return nil 
    } 
} 

使用法:

let weather = "its 70&deg; outside" 
print("weather: \(weather.convertFromHTML())") 

拡張機能として追加します。変換が必要なHTMLのために、アプリのどの部分であれ、どんな文字列でも問題を解決できるようになりました。それはクールです。

+0

私はあなたの方法を試しています。私の値型Stringにメンバー 'data'がないというエラーが表示されます。私はvarデータを作成し、それを何かと等しくすることになっていますか?私は「weatherArray」文字列を使うべきだと思ったが、それは正しいとは思わない。 – Talcicio

+0

最初に自分の '70 °"のコード例を使って、拡張機能と使用法を正しく実装しているかどうか確認してください。あなたは、エラーのスクリーンショットであなたの質問を編集し、私は一見を持って動作するようにする例を取得した場合。 – Frankie

+0

私は先に進み、あなたが提供したサンプルコードを試しました。私は 'self.data'変数について同じエラーを受けています。プレイグラウンドのスクリーンショットで質問を編集しました – Talcicio