我有以下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
答案 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!