我正在尝试Double?
从Objective-C 访问Swift类的属性。
class BusinessDetailViewController: UIViewController {
var lat : Double?
var lon : Double?
// Other elements...
}
在另一个视图控制器中,我尝试按lat
以下方式进行访问:
#import "i5km-Swift.h"
@interface ViewController ()
@property (strong, nonatomic) BusinessDetailViewController *businessDetailViewController;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.businessDetailViewController = [[BusinessDetailViewController alloc] initWithNibName:@"BusinessDetailViewController" bundle:nil];
self.businessDetailViewController.lat = businessArray[1]; /* THIS GIVES ME AN ERROR */
}
而我得到
在类型’BusinessDetailViewController *’的对象上找不到属性’lat’
为什么我不能访问此属性?我想念什么?
非Objective-C类型的可选值不会桥接到Objective-C中。也就是说,前三个属性TestClass
下面 会 是在Objective-
C可用,但第四不肯:
class TestClass: NSObject {
var nsNumberVar: NSNumber = 0 // obj-c type, ok
var nsNumberOpt: NSNumber? // optional obj-c type, ok
var doubleVar: Double = 0 // bridged Swift-native type, ok
var doubleOpt: Double? // not bridged, inaccessible
}
在Objective-C代码中,您将像这样访问前三个属性:
TestClass *optTest = [[TestClass alloc] init];
optTest.nsNumberOpt = @1.0;
optTest.nsNumberVar = @2.0;
optTest.doubleVar = 3.0;
你的情况,你可以转换lat
和long
是非可选或切换他们是实例NSNumber
。
请注意,你需要,如果你采取第二种办法(开关要小心你的Objective-C代码lat
和lon
对类型的非可选属性NSNumber
)
-而斯威夫特编译器会阻止你分配nil
到非可选特性,在Objective-
C编译器对此毫无保留,允许nil
值潜入您的Swift代码中,而没有机会在运行时捕获它们。考虑以下方法TestClass
:
extension TestClass {
func badIdea() {
// print the string value if it exists, or 'nil' otherwise
println(nsNumberOpt?.stringValue ?? "nil")
// non-optional: must have a value, right?
println(nsNumberVar.stringValue)
}
}
如果在两个属性中都使用值来调用,则效果很好,但是如果从Objective-C代码nsNumberVar
设置为nil
,则在运行时会崩溃。请注意,有
没有办法检查 是否nsNumberVar
是nil
使用它之前!
TestClass *optTest = [[TestClass alloc] init];
optTest.nsNumberOpt = @1.0;
optTest.nsNumberVar = @2.0;
[optTest badIdea];
// prints 1, 2
optTest.nsNumberOpt = nil;
optTest.nsNumberVar = nil;
[optTest badIdea];
// prints nil, then crashes with an EXC_BAD_ACCESS exception
问题内容: 使用最新的Xcode 9 Beta,我似乎完全无法访问Swift类的属性。更奇怪的是,我可以访问该类本身以实例化它或其他,但是完全无法访问它的属性。 因此,如果我有这个Swift类: 我尝试这样做: 我到底在做什么错?Xcode 9的新项目。 问题答案: 在Swift 4中更改了将Swift代码暴露给Objective-C的规则。请尝试执行以下操作: 作为一种优化,推断已在斯威夫特4.
问题内容: 有一个Objective c基类: 和一个快速的子类: 我如何 从内部访问? 问题答案: 很棒的查询。我们已经尽力做到这一点。我找到的唯一可行的解决方案 通过使用获得价值 设定值使用 希望有帮助。在不更改超级类的情况下可能的解决方案。
问题内容: 在Objective-C中,有一个称为的类方法,该方法在首次加载类时被调用。Swift中的等效项是什么? 问题答案: 在Swift 1.2之前: 编辑: 从Swift 1.2开始,您将无法再覆盖该方法。相反,查看该方法,它的行为与加载不同,它是在类第一次在某处而不是在应用程序初始加载时被调用的
问题内容: 我有一个旧的Objective-C项目,我想调用新的Swift函数和对象,我已经创建了文件“ ”和“ ” 对我来说,从Swift调用函数到Objective-C很容易,但是我有一个反向问题。 因此,我创建了一个简单的类“ System.Swift” 现在我尝试按照此处和文件内的文档进行操作 并且已将其导入到Objective-C类中。此时,在我的Objective-C代码的Object
问题内容: 我无法从Objective-C访问Swift Singleton。 swiftSharedInstance无法访问。 问题答案: 现在,我有以下解决方案。也许我忽略了一些使我能够直接访问“ swiftSharedInstance”的东西? 然后在ObjC中,我可以获取sharedInstance类方法(在导入xcode生成的swift标头绑定之后)
本文向大家介绍Swift使用Objective-C代码中的Swift类,包括了Swift使用Objective-C代码中的Swift类的使用技巧和注意事项,需要的朋友参考一下 示例 在同一模块中 在名为“ MyModule ”的模块内,Xcode生成一个名为的标头,该标头MyModule-Swift.h将公共Swift类公开给Objective-C。导入此标头以使用Swift类: 相关的构建设置: