从不同的Object - Swift获取变量值或运行函数

时间:2016-02-28 04:09:30

标签: swift delegates swift2 protocols

我试图:获取一些变量的值,以及运行一些存在于对象A中的函数,所有函数都来自对象B.

我已经尝试了几个小时才能使它与代理和协议一起工作。没运气。

我不能这样做:

 var delegate: MyDelegate = ViewController()

因为它似乎创建了ViewController的新实例。我想要已经运行的实例中的值。

我也做不到:

var delegate: MyDelegate?

因为ViewController对象永远不会响应。所以当我调用委托时,我得到一个nil?.somefunction()

我不希望屏幕之间出现偏差。我只需要从另一个对象启动一个函数。

我敢打赌,这是一个简单的解决方案。我无法得到它。谢谢你的帮助。

我的一些代码:

class PauseButtonView: NSView{
   var delegate: PauseButtonDelegate?
   ...
   var result = delegate?.startFunction()
}

protocol PauseButtonDelegate {
    func startFunction() -> String
}



  class ViewController: NSViewController, PauseButtonDelegate {
      func startFunction() -> String {
         let myString = "Hello World!"
         return myString
      }
}

1 个答案:

答案 0 :(得分:0)

如果您不希望任何一个类具有对另一个的引用,您可以使用内部通知在它们之间进行通信:

@Entity
@Table(name = "countries")
public class Country {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id ;

    @Column(name = "iso_code")
    private String isoCode;

    public Country() {
    }

    public Country(String isoCode) {
        this.isoCode = isoCode;
    }

    public Country(int id, String isoCode) {
        this.id = id;
        this.isoCode = isoCode;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getIsoCode() {
        return isoCode;
    }

    public void setIsoCode(String isoCode) {
        this.isoCode = isoCode;
    }

       @Override
    public String toString() {
        return "Country{" +
                "id=" + id +
                ", isoCode='" + isoCode + '\'' +
                '}';
    }
}


@Entity
@Table(name = "types")
public class Type {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Column(name = "type")
    private String type;

 @ManyToOne
@JoinColumn(name = "country_id")
private Country country;

    @ManyToOne
    @JoinColumn(name = "group_id")
    private Group group;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public Group getGroup() {
        return group;
    }

    public void setGroup(int priority) {
        this.group = group;
    }
}