我想在Objective-C中使用swift类

时间:2019-07-05 06:12:26

标签: objective-c swift

我想在Objective-C文件中使用swift类,并且需要修改字符串值。

还要在ObjPost中使用媒体类

我尝试将两个类都导入ProjectName-Swift.h文件中

@class ObjPost;
@class ObjMedia;

下面是我的速成班

@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
}
  

我正在使用此类,但无法在Objective-C文件中获取变量。

当我从ObjPost获取userName时,将发生错误 Property 'userName' cannot be found in forward class object 'ObjPost'

enter image description here

2 个答案:

答案 0 :(得分:0)

使用@objc声明变量,如下面的代码,然后尝试:

@objc var userName : String

您说的上述方法不起作用,因此我尝试编写完整的代码。我在该项目中创建了一个文件Country.swift,在其中编写了以下代码:

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

然后在我编写的something.m文件中:

#import "TargetName-Swift.h"

如果TargetName包含空格,请用'_'替换空格 然后使用类似的类:

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

这有效,没有任何错误。

如果您还需要将此swift类导入.h文件(不要在.h文件中导入TargetName-Swift.h),请尝试如下代码:

@class CountrySwift;

@interface ObjectiveCClass : NSObject

-(CountrySwift* ) countryObject;

@end

答案 1 :(得分:0)

  

我尝试将两个类都导入ProjectName-Swift.h文件中

@class ObjPost;
@class ObjMedia;

您将这些导入称为,但不是。它们只是前向声明。他们没有告诉编译器这些类的信息。

有一个共享的Objective-C标头。在“ Objective-C生成的接口头名称”下查看应用程序目标的构建设置,以了解其名称。类似于 MyApp-Swift.h 。您需要在所有需要导入的实现文件( .m 文件,而不是 .h 文件)顶部的文件处导入:

#import "MyApp-Swift.h" // except you need to get the name right