Сохраните пользовательский объект (класс в Swift) для доступа методом Objective-C - PullRequest
0 голосов
/ 14 октября 2018

Я создал класс в Swift (который я изучаю), который я использую для хранения определенных значений следующим образом:

@objc public class Book: NSObject {
    var title: String = ""
    var date: Date = Date()
    var sku: Float = 0
}

Теперь я хотел бы сохранить этот класс в эквиваленте свойствак нему может обратиться мой класс Objective-C.

Я попытался создать переменную в View Controller, где класс используется следующим образом:

var lastBookViewed = Book()

Однако, когда я пытаюсь сохранитьобъект к свойству с помощью следующего кода, я получаю сообщение об ошибке:

//create instance of book
let myBook = Book()
//gather information about book
lastBookViewed = myBook //THROWS COMPILER ERROR 'Use of Unresolved Identifier lastBookViewed

Есть ли способ сделать это?

Если проще, сохранение объекта в свойство в Objective-C файл также будет работать, но до сих пор я не смог получить файл Objective-C для распознавания класса Book, созданного в Swift, хотя я поставил @objc перед ним, как рекомендовано.

Редактировать

Когда я пытаюсь создать свойство или переменную для хранения пользовательского объекта Swift в другом классе Swift (класс View Controller) в том же файле Swift со следующим синтаксисом:

var lastBookViewed: Book

соmpiler выдает предупреждение для класса VC "yourVC не имеет инициализаторов"

1 Ответ

0 голосов
/ 14 октября 2018

Перейти к общим настройкам вашего проекта.Выберите правильную цель для вашего приложения.Перейдите в «Build Settings» и переключитесь на «All» вместо «Basic», которое используется по умолчанию.Здесь ищите раздел «Упаковка».Включите «Определение модуля», изменив «Нет» на «Да».

Screen 1

Когда это будет включено, мы теперь будемвозможность использовать быстрые классы в файлах target-c.

Перед выходом из «Настройки сборки» найдите «Название модуля продукта» в разделе «Упаковка».Это будет важно, поэтому обязательно запишите и точно скопируйте «Имя модуля продукта».

Затем перейдите к классу Objective-C, где вы хотели бы иметь возможностьдоступ к вашему быстрому классу.В файле реализации или .m этого класса импортируйте заголовок, подобный следующему:

#import "MyProjectModuleName-Swift.h"

Здесь имя файла импортадолжно быть точное имя модуля проекта из настроек сборки.Любой файл target-c, к которому вы хотите получить доступ к вашему классу swift, должен включать этот импорт.

Теперь стоит упомянуть одну потенциальную проблему, которая может возникнуть при использовании класса swift.Objective-c не может читать быстрые классы верхнего уровня.Поэтому, если вы перейдете к использованию метода или переменной из вашего класса swift напрямую, он не будет распознан.Есть одно простое решение этой проблемы.Это сделать ваш класс public
 @objc public class myClass
...