委托方法属性在符合类

时间:2016-02-07 06:34:41

标签: ios swift delegates protocols

我有以下protocol

protocol SentenceDelegate: class{
   func sentenceDidFinish()
}

我的SentenceMarkov类符合协议:

class SentenceMarkov : SentenceDelegate{
   // foo
   // bar
}

我在我的合规类中实现了协议方法:

class SentenceMarkov : SentenceDelegate{
    //...
   func sentenceDidFinish{
      //Do something
   }
    //...
}

我在类上创建了一个属性,该属性调用名为sentenceDelegate的协议方法:

class otherClass{
    //..
    weak var sentenceDelegate: SentenceDelegate? 
    //..
}

我在第一堂课中将此属性设置为self

class SentenceMarkov{
var FirstOne:OtherClass {
    didSet { FirstOne.sentenceDelegate = self}
}
var SecondOne:OtherClass {
    didSet{ SecondOne.sentenceDelegate = self}
}

init(Ult:OtherClass, Penult:OtherClass){
    self.FirstOne= Ult
    self.SecondOne = Penult
    self.FirstOne.sentenceDelegate = self
    self.SecondOne.sentenceDelegate = self
}
//..
}

最后,我在sentenceDelegate

之后的OtherClass中调用init()方法
 class OtherClass{
    func sentenceDone(){
        sentenceDelegate?.sentenceDidFinish()
    }
 } 

问题在于,当我在上面的方法sentenceDelegate上设置断点时nil。我不确定为什么因为我设置了它,虽然我可能做错了,但我不知道如何改善它。以下是三个Swift文件,包括ViewController,其中SentenceMarkov已初始化:

https://gist.github.com/ebbnormal/e1cb791dd165a6866e11 https://gist.github.com/ebbnormal/263c9343e403c3a7ac40 https://gist.github.com/ebbnormal/1400e7da024d78ba5ed0

1 个答案:

答案 0 :(得分:1)

以下适用于我:

protocol Greeter: class {
    func greet()
}

class Dog {
    weak var greeter: Greeter?
}

class DogPound: Greeter {

    func greet() {
        print("Hi.  Welcome to the DogPound!")
    }

    var dog: Dog {
        didSet {
            dog.greeter = self
        }
    }

    init(dog: Dog) {
        self.dog = dog
        self.dog.greeter = self
    }

}

let myDog = Dog()
myDog.greeter?.greet()  //=>nil

DogPound(dog: myDog)
myDog.greeter?.greet()

--output:--
Hi.  Welcome to the DogPound!