当前位置:  开发笔记 > IOS > 正文

在Objective-C类中使用时,无法在调试区域中看到Swift对象层次结构

如何解决《在Objective-C类中使用时,无法在调试区域中看到Swift对象层次结构》经验,为你挑选了1个好方法。

我的问题可能很简单,但我迷失了.任何评论,想法,帮助,预测都会非常有用.

这是我的课程

TrialSwiftClass.swift

import Foundation

@objc public class TrialSwiftClass : NSObject{
    var first : String?
    var second : NSString?
    var third : NSNumber = 0


    override init(){
        super.init()
    }

    init(data:NSArray){

            self.first = data[0] as? String
            self.second = data[1] as? NSString
            self.third = data[2] as! NSNumber
    }
}

TrialObjectiveCClass.h

#import 

@interface TrialObjectiveCClass : NSObject

@property (nonatomic, strong) NSString *first;
@property (nonatomic, strong) NSString *second;
@property (nonatomic, assign) NSNumber *third;

- (instancetype)initWithArray:(NSArray *)data;

@end

TrialObjectiveCClass.m

#import "TrialObjectiveCClass.h"

@implementation TrialObjectiveCClass


- (instancetype)initWithArray:(NSArray *)data{
    self.first = data[0];
    self.second = data[1];
    self.third = data[2];

    return self;
}
@end

现在问题来了.当我在我的ViewController.m中使用这两个类时,其中包含以下代码:

#import "ViewController.h"
#import "TrialObjectiveCClass.h"
#import "Codemaster-Swift.h" //Automatically created header to use Swift code in Objective-C


@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    NSArray *trialArray = @[@"FirstString", @"SecondString", @99];


    //First the Swift part
    TrialSwiftClass *obj = [[TrialSwiftClass alloc] initWithData:trialArray];

    NSLog(@"%@", obj.first);
    NSLog(@"%@", obj.second);
    NSLog(@"%@", obj.third);


    //Now the Objective-C part
    TrialObjectiveCClass *obj2 = [[TrialObjectiveCClass alloc] initWithArray:trialArray];
    NSLog(@"%@", obj2.first);
    NSLog(@"%@", obj2.second);
    NSLog(@"%@", obj2.third);


}

如果我在ViewController.m的最后一个NSLog中放置一个断点,这是我在调试区域中看到的: 在此输入图像描述

我的日志显示了对象属性的正确值.

为什么我看不到我的Swift类的层次结构,但可以看到我的Objective-C类?如何解决这个问题呢?



1> Jim Ingham..:

Swift类中的变量作为属性暴露给ObjC.目前,Locals视图不显示对象的属性,仅显示其ivars.无论该类是来自ObjC还是Swift,都是如此.这就是为什么swift变量不会出现在locals视图中.

您可以使用lldb控制台中的expression命令来查看对象的属性.例如,在您的示例中停止,您可以执行以下操作:

(lldb) expr obj.first
(__NSCFConstantString *) $0 = 0x00000001002d1498 @"FirstString"

等等

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有