Ios 将方法属性委托给要在一致性类上触发的

Ios 将方法属性委托给要在一致性类上触发的,ios,swift,delegates,protocols,Ios,Swift,Delegates,Protocols,我有以下协议 protocol SentenceDelegate: class{ func sentenceDidFinish() } 我的SentenceMarkov类符合协议: class SentenceMarkov : SentenceDelegate{ // foo // bar } 我在我的一致性类中实现协议方法: class SentenceMarkov : SentenceDelegate{ //... func sentenceDidFini

我有以下
协议

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
}
//..
}
最后,我在
OtherClass
中调用
init()之后的
sentenceDelegate
方法

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


以下内容对我很有用:

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!

您是否确保从
FirstOne
SecondOne
实例调用sentenceDone?@Vishnugondlekar是的,因为我在那里设置了一个断点并调用了它。谢谢,但我看不出这与我在代码(GIST)中所做的有什么不同。我创建一个
SentenceMarkov
对象(一个狗磅)在
didSet
中设置
sentenceDelegate
,在属于它的两个
集合或(狗)上,初始化这两个
句子,然后将它们添加到
init
。请告诉我区别。
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!