SWIFT 3 -从JSON web url的字符串中取出html标签



我想知道如何从web url中剥离出JSON的HTML标签。我是否需要用类似的NSString

所以我希望去掉摘要值中的html标记。我看了一下,它说NSString可以使用但我不确定这是否能在Swift 3中实现。任何帮助都将不胜感激。

我的代码:

import UIKit
import Alamofire
struct postinput {
    let mainImage : UIImage!
    let name : String!
    let author : String!
    let summary : String!
}

class TableViewController: UITableViewController {
    var postsinput = [postinput]()
    var mainURL = "https://www.example.com/api"
    typealias JSONstandard = [String : AnyObject]
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        callAlamo(url: mainURL)
    }
    func callAlamo(url : String){
        Alamofire.request(url).responseJSON(completionHandler: {
            response in
            self.parseData(JSONData: response.data!)

        })
    }
    func parseData(JSONData : Data) {
        do {
            var readableJSON = try JSONSerialization.jsonObject(with: JSONData, options: .mutableContainers) as! JSONstandard
            // print(readableJSON)
            if let posts = readableJSON["posts"] as? [JSONstandard] {
                for post in posts {
                    let title = post["title"] as! String
                    let author = post["author"] as! String
                    guard let dic = post["summary"] as? [String: Any], let summary = dic["value"] as? String else {
                        return
                    }

                    print(author)
                    if let imageUrl = post["image"] as? String {
                        let mainImageURL = URL(string: imageUrl )
                        let mainImageData = NSData(contentsOf: mainImageURL!)
                        let mainImage = UIImage(data: mainImageData as! Data)
                        postsinput.append(postinput.init(mainImage: mainImage, name: title, author: author, summary: summary))
                    }
                }
                DispatchQueue.main.async {
                    self.tableView.reloadData()
                }
            }

        }

        catch {
            print(error)
        }

    }
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return postsinput.count
    }
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
        // cell?.textLabel?.text = titles[indexPath.row]
        let mainImageView = cell?.viewWithTag(2) as! UIImageView
        mainImageView.image = postsinput[indexPath.row].mainImage
        //(cell?.viewWithTag(2) as! UIImageView).image = postsinput[indexPath.row].mainImage
        let mainLabel = cell?.viewWithTag(1) as! UILabel
        mainLabel.text = postsinput[indexPath.row].name
        mainLabel.font = UIFont(name: "Helvetica", size:14)
        let autLabel = cell?.viewWithTag(3) as! UILabel
        autLabel.text = postsinput[indexPath.row].author
        autLabel.font = UIFont(name: "Helvetica", size:12)
        let sumLabel = cell?.viewWithTag(4) as! UILabel
        sumLabel.text = postsinput[indexPath.row].summary
        sumLabel.font = UIFont(name: "Helvetica", size:12)

        //(cell?.viewWithTag(3) as! UILabel).text = postsinput[indexPath.row].author
        return cell!
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

您可以使用此代码剥离html标记

从你上一个问题

guard let dic = post["summary"] as? [String: Any], let summary = dic["value"] as? String else {
    return
}
let str = summary.replacingOccurrences(of: "<[^>]+>", with: "", options: .regularExpression, range: nil)
print(str)

编辑

我已经检查过了,它正在工作

let summary = "<p>Latin text here</p>"
let str = summary.replacingOccurrences(of: "<[^>]+>", with: "", options: .regularExpression, range: nil)
print(str)

此处为拉丁文

最新更新