Как включить URL-адреса в структуру таблицы (массив) и вызвать их в didSelectRowAt? - PullRequest
0 голосов
/ 18 апреля 2019

Я работаю в xCode 10.2 с помощью swift. Я создал глобальные переменные в моем первом контроллере представления для 6 табличных представлений. В раскадровке у меня 6 tableViewControllers. В отдельном файле swift я создал структуру таблицы для хранения массива и отображения данных в каждой соответствующей ячейке. В каждом представлении контроллер в didSelectRowAt подключается к следующему табличному представлению. Моя проблема, когда я добираюсь до последнего представления таблицы. Мне нужно связать URL-адреса веб-сайтов с массивом в пятой таблице. Я получаю сообщение об ошибке, утверждающее, что невозможно преобразовать строку в URL. Пожалуйста помоги!

 var fifthArray = [
    FifthTableStruct(FifthTitle: ["Energy Guide", "https://www.google.com", "Warranty Page", "Use & Care Guide", "Specification Sheet", "FIT System", "Installation Instructions"]),
    FifthTableStruct(FifthTitle: ["Energy Guide", "Warranty Page", "Use & Care Guide", "Specification Sheet", "FIT System", "Installation Instructions"])
    ]

var sixthArray = [
    SixthTableStruct(SixthTitle:  ["https://www.whirlpool.com/content/dam/global/documents/201708/EnergyGuide-W11037203-RevA.pdf", "https://www.whirlpool.com/content/dam/global/documents/201708/WarrantyPage-W11037201-W.pdf", "https://www.whirlpool.com/content/dam/global/documents/201708/UseandCareGuide-W11037201-RevA.pdf", "https://www.whirlpool.com/content/dam/global/documents/201711/WL170160A_p2.pdf", "https://www.whirlpool.com/content/dam/global/documents/201901/wash-performance-guarantee-en.pdf", "https://www.whirlpool.com/content/dam/global/documents/201711/InstallationInstructions-W10682737-RevA.pdf"])
    ]

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    let urlString = self.sixthArray[indexPath.row]
    if let url = URL(fileURLWithPath: urlString)
    {
        UIApplication.shared.openURL(url)
    }

}

У меня есть код для tableStruct в файле Array, отдельном от viewController.

    import Foundation
    import UIKit


    struct SecondTableStruct {
        var SecondTitle = [String]()
    }
    struct ThirdTableStruct {
        var ThirdTitle = [String]()
    }
   struct FourthTableStruct {
        var FourthTitle = [String]()
    }
    struct FifthTableStruct {
        var FifthTitle = [String]()
    }
    struct SixthTableStruct {
        var SixthTitle = [String]()
    }

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019

В вашем didSelectRow выполните следующие действия. В настоящее время вы напрямую обращаетесь к struct, но не к ее массиву с именем SixthTitle

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

let urlString = self.sixthArray.SixthTitle[indexPath.row]
if let url = URL(fileURLWithPath: urlString)
{
    UIApplication.shared.openURL(url)
}

}

0 голосов
/ 19 апреля 2019

sixthArray является массивом SixthTableStruct с, SixthTableStruct имеет одно поле, SixthTitle, тип которого является массивом String.

Таким образом, чтобы перейти к одномустрока, хранящаяся в sixthArray, вам необходимо:

  1. Индексировать в sixthArray, чтобы получить одно значение типа SixthTable, назовем это intermediate1
  2. Выберите SixthTitle поле intermediate1 Чтобы получить значение типа массив String, давайте назовем это intermediate2
  3. Индекс в intermediate2 для получения одного String значения

В коде:

let intermediate1 = sixthArray[someIndex]
let intermediate2 = intermediate1.SixthTitle
let urlString = intermediate2[someOtherIndex]

Мы не можем сказать вам, какие значения индекса два вам нужны, предположительно одно indexPath.row.(Вы можете, конечно, написать вышеупомянутые три строки как одну без промежуточных, если хотите.)

Пара предложений, сначала у вас появляются заголовки страниц и связанные URL-адреса, которые образуют тесно связанную пару данныхзначения, разбитые и хранящиеся в отдельных массивах, требующие от вас тщательного управления порядком элементов в этих массивах и утрачивающие тесную связь между элементами.Рассмотрим один массив из нескольких struct, скажем PageDetails, с соответствующими свойствами, например, title и URL, чтобы объединить их вместе.

Во-вторых, массивы могут содержать URL с, а непросто String с ...

HTH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...