Как я могу использовать родителя в поле функции? - PullRequest
1 голос
/ 10 марта 2020

У меня есть этот код (MenuItem для меню гамбургеров SwiftUI, я использую массив MenuItem в цикле):

import Foundation

public class MenuItem
{
    var title: String
    var imagename: String
    var index: Int
    var action: () -> ()

    init(title: String, index: Int, action: @escaping () -> ())
    {
        self.title = title
        self.index = index
        self.action = action
        self.imagename = ""
    }

    convenience init(title: String, image: String, index: Int, action: @escaping () -> ())
    {
        self.init(title: title, index: index, action: action)
        self.imagename = image
    }

    func getTitle() -> String
    {
        return self.title
    }
}

    //need in output "ItemTitle: Title 1"
var menuitems = [
        MenuItem(title: "Title 1", index: 0, action: {
            print("ItemTitle: \(menuitems[self.index])")//i can't compile it
        }),
        MenuItem(title: "Title 2", index: 1, action: {
            print("ItemTitle: \(MenuItem.self.title)")//i can't compile it!
        }),
        MenuItem(title: "Title 3", index: 2, action: {
            print("ItemTitle: \(self.getTitle())")//i can't compile it!
    })]

Мне нужно использовать поля 'index', 'imagename' и 'title' в функции поле «действие». Как я могу это сделать?

PS: извините за мой Engli sh)))

1 Ответ

1 голос
/ 10 марта 2020

Здесь возможное решение (протестировано с Xcode 11.2)

public class MenuItem
{
    var title: String
    var imagename: String
    var index: Int
    var action: (MenuItem) -> ()

    init(title: String, index: Int, action: @escaping (MenuItem) -> ())
    {
        self.title = title
        self.index = index
        self.action = action
        self.imagename = ""
    }

    convenience init(title: String, image: String, index: Int, action: @escaping (MenuItem) -> ())
    {
        self.init(title: title, index: index, action: action)
        self.imagename = image
    }

    func getTitle() -> String
    {
        return self.title
    }
}

    //need in output "ItemTitle: Title 1"
var menuitems = [
        MenuItem(title: "Title 1", index: 0, action: { item in
            print("ItemTitle: \(item.index)")//i can't compile it
        }),
        MenuItem(title: "Title 2", index: 1, action: { item in
            print("ItemTitle: \(item.index)")//i can't compile it!
        }),
        MenuItem(title: "Title 3", index: 2, action: { item in
            print("ItemTitle: \(item.getTitle())")//i can't compile it!
    })]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...