Я хочу использовать быстрый класс в Objective-C - PullRequest
0 голосов
/ 05 июля 2019

Я хочу использовать свой swift-класс в файлеjective-c и мне нужно изменить строковые значения.

Кроме того, я хочу использовать медиа-класс в ObjPost

Я пытаюсь импортироватьоба класса в файле ProjectName-Swift.h

@class ObjPost;
@class ObjMedia;

ниже - мой класс swift

@objc class ObjPost:NSObject, Codable {

/// Post ID
var id:Int

///
var contentAvailable : Bool

/// Post User ID
var userId : Int

/// Post user name
var userName : String

/// Profile Image (Display Picture)
var userProfileImage: String

var subTitle : String
var postedSince : String
var isPin : Bool
var location : String
var lat : String
var long: String

var albumName:String
var isLiked: Bool
var isDisliked : Bool
var likes : Int
var dislikes: Int
var shares: Int
var comments:Int
//var postDescription: String?
var postDescription: String?
//    var objPostDescription: String
var albumId: Int
var privacy: Int
var isEditable: Bool
var media:[ObjMedia]
}

@objc class ObjMedia:NSObject, Codable {
/// Media ID
var id: Int

/// 1==Image, 2==Video
var type: Int // 1 = Image, 2=Video
var url: String
var description: String?
var thumb: String
var isLiked: Bool
var isDisliked:Bool

/// like counter
var likes:Int

/// dislike counter
var dislikes: Int

/// share counter
var shares: Int

/// comment counter
var comments: Int
var isEditable:Bool
var isPin: Bool
var isCoverMedia: Bool
}

Я использую этот класс, ноЯ не могу получить переменную в файле target-c.

Когда я получаю userName из ObjPost, возникает ошибка Property 'userName' cannot be found in forward class object 'ObjPost'

enter image description here.

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Я пытаюсь импортировать оба класса в файл ProjectName-Swift.h

@class ObjPost;
@class ObjMedia;

Вы называете этот импорт, но это не так. Это просто предварительные заявления. Они ничего не говорят компилятору об этих классах.

Существует общий заголовок Objective-C. Посмотрите в настройках сборки цели вашего приложения под «Objective-C Generated Interface Header Name», чтобы узнать, каково его имя. Это будет что-то вроде MyApp-Swift.h . Вам нужно импортировать в файл вверху всех файлов реализации, которые в нем нуждаются (файлы .m , а не .h файлы):

#import "MyApp-Swift.h" // except you need to get the name right 
0 голосов
/ 05 июля 2019

объявите переменную, используя @objc, как показано ниже, а затем попробуйте:

@objc var userName : String

вышеприведенное не работает, как вы сказали, поэтому я попытался создать полный код.Я создал файл Country.swift в проекте, который я написал ниже код:

    @objc class CountrySwift: NSObject {
     var name: String = ""
     var ranking: String = ""
     }

, то в файлеthing.m я пишу:

#import "TargetName-Swift.h"

Если TargetName содержит пространство, замените пробел на '_', затем используйте класс как:

 CountrySwift *country = [[CountrySwift alloc] init];
 country.name = @"Bangladesh";

Это работает без ошибок.

Если вам нужен этот класс swift также в файле .h (неимпортируйте TargetName-Swift.h в файл .h), затем попробуйте, как показано ниже:

@class CountrySwift;

@interface ObjectiveCClass : NSObject

-(CountrySwift* ) countryObject;

@end
...