使用数组中的字符串替换出现次数

时间:2018-04-19 18:38:32

标签: ios swift uilabel

我正在制作一个应用程序,它将在uilabel.text中“填空” 从文本文件。我有点坚持如何用 selectedWords 字符串类型的单词数组填充我的文本文件。到目前为止,我能够显示文本并替换我的文本文件中的“空白”,只有一个单词,但我无法弄清楚如何使用我的selectedWords数组替换文本文件中的§§§单词从中。有谁能帮助我吗?

class GameVC: UIViewController {


    @IBOutlet weak var storyLabel: UILabel!


    override func viewDidLoad() {
        super.viewDidLoad()



        if let Path = Bundle.main.url(forResource: "fortelling1", withExtension: "rtf") {
            do {
                let attributedStringWithRtf: NSAttributedString = try NSAttributedString(url: Path, options: [NSAttributedString.DocumentReadingOptionKey.documentType: NSAttributedString.DocumentType.rtf], documentAttributes: nil)
                self.storyLabel.attributedText = attributedStringWithRtf
                self.storyLabel.font = UIFont(name: "TimesNewRomanPS-BoldItalicMT",
                                              size: 30.0)

                storyLabel.text = storyLabel.text?.replacingOccurrences(of: "§§§", with: "YES")

            } catch let error {
                print("Got an error \(error)")
            }
        }


    }


    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }




}

1 个答案:

答案 0 :(得分:0)

你是那里的9/10。您需要循环,查看子串“§§§”的范围是什么,如果存在,则用列表中的下一项替换该范围。

例如:

var s = "The Pep Boys are §§§, §§§, and §§§."
var arr = ["Manny", "Moe", "Jack"]
while let r = s.range(of:"§§§") {
    s.replaceSubrange(r, with: arr.removeFirst())
}
// The Pep Boys are Manny, Moe, and Jack.

当然,这假设arr中没有任何字符串包含或生成"§§§"的新出现,但我认为可以假设为了简单起见。在我的实现中也存在一些故意的低效率,如果目标字符串非常长,这将是令人反感的,但同样,出于教学目的,我认为现在最好保持简单。