2017-09-11 6 views
2

Stringに変換する場合は、を使用して、Stringのコンテンツの長さを見つけました。いくつかの操作を行う必要があります。HTMLタグを文字列に変換する

マイmodalクラス、

class PostViewModel { 
    var content: TextContent 
    enum TextContent { 
      case expanded(String) 
      case collapsed(String) 

      static func == (lhs: TextContent, rhs: TextContent) -> Bool { 
       switch lhs { 
       case .collapsed(let content): 
        if case collapsed(content) = rhs { 
         return true 
        } 
        return false 
       case .expanded(let content): 
        if case expanded(content) = rhs { 
         return true 
        } 
        return false 
       } 
      } 
     } 
    } 

と私はcellForItem(at index: Int)でこの関数を呼び出しています、

func applyVerticalSizeConcernedRendering(fromViewModel viewModel: PostViewModel) { 
    switch viewModel.content { 
     case .collapsed(let content): 
      let str = content.html2String 
      print(str) 
     case .expanded(let content): 
      break 
    } 
} 

html2StringString

extension String { 
     var html2AttributedString: NSMutableAttributedString? { 
     guard let data = data(using: String.Encoding.utf8) else { return nil } 
      let attrs: [String: Any] = [ 
       NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, 
       NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue 
      ] 
      do { 
       let attrStr = try NSMutableAttributedString(data: data, options: attrs, documentAttributes: nil) 
       return attrStr 
      } catch let error as NSError { 
       print(error.localizedDescription) 
       return nil 
      } 
     } 
     var html2String: String { 
      return html2AttributedString?.string ?? "" 
     } 
    } 

extensionクラスでの問題は、それはしばらくのクラッシュだです〜する、それは、ここに

let attrStr = try NSMutableAttributedString(data: data, options: attrs, documentAttributes: nil) 

をクラッシュだとStringは以下

空ではありませんString

にHTMLタグを例HTML Stringさrting

<strong>I want to test HTML Tags<br><\/strong>dsfhjdjf sjdfdj djfjdfj djkf dfjdhf <strong>adjf<br>asks <\/strong>djfdkf<br><strong>dfdjk dkfjdk <\/strong>dfjik iai <strong>adsfhj<\/strong> 

これは時に正常に動作しています私はハードコードの値で試しましたが、それは私がを取得するときにクラッシュしているenum

And i don't know why the <code>String</code> is placed inside brackets. I hope, that's causing the crash

からクラッシュログは、

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array' 

で誰もがこれで助けてくださいことはできますか?

+0

例外ブレークポイントを追加して、どのラインでエラーが発生したかを確認できますか? – TMob

+0

@TMob私は質問で編集しました。ちょうどそれが壊れています –

+0

変換しようとしているHTML文字列が空である可能性はありますか? –

答えて

1

、代わりにあなたが行っている全体のプロセスを実行する必要がこれを試してみません:

extension String { 
    var htmlAttributedString: NSAttributedString? { 
     do { 
      return try NSAttributedString(data: Data(utf8), options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue], documentAttributes: nil) 
     } catch { 
      print("error:", error) 
      return nil 
     } 
    } 
    var htmlString: String { 
     return htmlAttributedString?.string ?? "" 

} 

用途:

let html = "<strong>I want to test HTML Tags<br></strong>dsfhjdjf sjdfdj djfjdfj djkf dfjdhf <strong>adjf<br>asks</strong>djfdkf<br><strong>dfdjk dkfjdk </strong>dfjik iai <strong>adsfhj</strong>" 
let str = html.htmlString 

ですから、基本的にはちょうどあなたの文字列にString extensionを使用。
上記プリント以下:

enter image description here

Hereはあなたが試すことができますサンプルプロジェクトですこれは私が私のプロジェクトに

Updateを使用するものです。

+0

をやっているのです、更新の質問を参照してください ' - [_ SwiftValue unsignedIntegerValue ]:インスタンスに送信された認識不能なセレクタ0x60000025be70' ***キャッチされていない例外 'NSInvalidArgumentException'のためアプリを終了しています、理由: ' - [_ SwiftValue unsignedIntegerValue]:インスタンスに送信された認識できないセレクタ0x60000025be70'' –

+0

それは奇妙です。私のコードが印刷したものを私のアップデートでチェックアウトし、試してみることができるサンプルプロジェクトを追加しました。 –

+0

更新された質問をご覧ください。ハードコードされた値で正常に動作しています –

関連する問題