首页 > 解决方案 > 如何在swift中为每个循环附加字符串

问题描述

我想解析 json 字符串并显示在 UITextView 中。我正在使用带有键和值的 HTML 字符串获取数据。这是来自服务器的以下示例字符串响应,

   {"":"<strong>Adidas<\/strong><br>Enjoy 10% off","Period":"10 Oct 2019 - 11 Nov 2019","Description":"<p>Enjoy 30% off 
   "Terms & Conditons":"<ol>\n<li>It's available only in peak hours<\/li>\n}

我需要用 HTML 显示如下格式,

Expected output: 
      Adidas
      Enjoy 10% off
      Period:
      10 Oct 2019 - 11 Nov 2019
      Description:
      Enjoy 30% off.
      Terms & Conditons:
      It's available only in peak hours

我已经使用字典并提取了数据,但问题是数据的顺序不是按顺序排列的。

   func setupData(responseString : String)
   {
    // Convert string to dictionary for extracting the keys and values
    // Need to maintain the order while adding the data
    let content = convertToDictionary(text: responseString)
    var text : String = ""
    if let contentDataDict = content
    {
        for (key, value) in  contentDataDict
        {
         // want to append the key and values in the sequence order
                textView.attributedText = text.htmlToAttributedString
            }

        }
    } 

如何根据预期输出解析和显示数据。

标签: iosjsonswiftnsstring

解决方案


Devan,你认为字典不起作用是对的。您最好将 html 加载到数组中。我使用伪代码来代表一个新convertToArray的来替换你的convertToDictionary,因为你没有提供所有的原始代码

struct Component {
  field: String
  value: String
}

func convertToArray(response: String) -> [Component] [
  let components = [Component]()
  for entries in response {
    //extract key/value pairs from html as before
    //then create a component struct with them and add it to the array
    components.append(Component(field: key, value: value)
  }
  return components //now a sequence of structs represent your data in order
}


func setupData(responseString : String) {
  let components: [Component] = convertToArray(text: responseString)
  for component in components {
     //add component.field and component.value to your attributed text string
     //and then display as before
  }
}


推荐阅读