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!