Objective C 为 Swift 中的变量 属性 赋值的语法

Objective C syntax to assign a value to a variable property in Swift

我当前的项目在 Objective C 中,我想在 Swift 中对其进行新的实现。

在我的 Objective C class 中,我需要为 swift 变量 属性 赋值,但我不知道执行此操作的语法。我想这样赋值。

self.pollBarGraph = [[PollBarGraphView alloc] initWithFrame:self.view.frame];

//I want to replace this with obj-c syntax to make it work
        self.pollBarGraph.dataEntries =
        [
           BarEntry(score: 100, title: "A"),
           BarEntry(score: 35, title: "B"),
           BarEntry(score: 55, title: "C"),
           BarEntry(score: 3, title: "D"),
           BarEntry(score: 10, title: "E")
        ]

PollBarGraph 是我在其中添加的 Swift 文件:

class BarEntry: NSObject {
        let score: Int
        let title: String

        init(score: Int, title: String) {
            self.score = score
            self.title = title
        }
    }

    @objc open var dataEntries: [BarEntry] = []{
        didSet {
            //my code
        }
    }

如何使用 Objective C 语法将值分配给 Swift 变量?

首先,你不需要didSet,因为你在赋值的时候已经有了这个值。当设置值时,您使用 didSet 做一些额外的副作用,例如一些计算,使某些东西无效等。但这里不是这种情况。

所以首先您需要在 swift 代码中正确指定 类,例如

class BarEntry: NSObject {
    let score: Int
    let title: String

    @objc init (score: Int, title: String) {
        self.score = score
        self.title = title
    }
}

class PollBarGraphView : UIView {
    @objc open var dataEntries = [BarEntry]()  // default: empty array
}

别忘了通过 @objc 公开你的 BarEntry.init。 在Objective C中使用,语法如下:

PollBarGraphView *pb = [[PollBarGraphView alloc] initWithFrame:self.view.frame];
pb.dataEntries = @[
                    [[BarEntry alloc] initWithScore:1 title:@"A"],
                    [[BarEntry alloc] initWithScore:2 title:@"B"],
                    [[BarEntry alloc] initWithScore:3 title:@"C"]
                  ];