Как печатать только части текстового файла в пакете

#ios #swift #text-files

#iOS #swift #текстовые файлы

Вопрос:

Как выполнить печать только выбранных строк из вашего текстового файла в зависимости от того, какая кнопка нажата.

Поэтому, если нажать кнопку один, строка 4 текста из моего текстового файла будет напечатана в UILabel.

Прямо сейчас он печатает весь файл.

 @IBOutlet weak var AboutLabel: UILabel!

@IBAction func GetAboutInfo(_ sender: UIButton) {
    if let path = Bundle.main.path(forResource: "Meditations", ofType: "txt") {
        if let text = try? String(contentsOfFile: path,
                                  encoding: String.Encoding.utf8) {
            AboutLabel.text = text
        }
    }
}
  

Хотелось бы, чтобы он печатал только строку текста, которую я отправляю, в зависимости от того, какая кнопка нажата на предыдущем экране.

Комментарии:

1. После загрузки файла вам нужно будет выполнить синтаксический анализ в соответствии с вашими потребностями

2. Текстовый файл — плохой выбор. Поместите строки текста в список (либо массив, либо словарь в зависимости от ваших потребностей) или, если файл достаточно большой, поместите данные в базу данных, чтобы вам не нужно было загружать все в память только для получения одной строки текста.

Ответ №1:

Вы можете разделить текст в соответствии с вашими требованиями, здесь я предполагаю, что строки разделены разрывом строки n

Кроме того, было бы лучше загрузить вашу строку один раз вне метода

И, как было предложено @rmaddy, лучшим вариантом было бы .plist

 let meditationsPath = Bundle.main.path(forResource: "Meditations", ofType: "txt")!
let meditationText = try String(contentsOfFile: meditationsPath,
            encoding: String.Encoding.utf8)
let meditationTextArray = meditationText.split(separator: "n")
  

Ваш getAboutInfo станет

 // Name your methods and variables with camel case
@IBAction func getAboutInfo(_ sender: UIButton) {

     // Assign the button tag for index
     let index = sender.tag

     if index < meditationTextArray.count {
       let text = meditationTextArray[index]              
       self.aboutLabel.text = text
     }
}