使用协议以swift语言连接两个类的问题

使用协议以swift语言连接两个类的问题,swift,swift-playground,Swift,Swift Playground,我使用游乐场,并试图在下面的简单代码中获得消息“show:Hello”。但是,没有显示任何内容,但没有编译器错误。我不知道问题出在哪里 protocol showSome{ func show(str:String) } class client: showSome{ var s: server? init(){ s = server(str: "Hello", delegate: self) } func setup(){ le

我使用游乐场,并试图在下面的简单代码中获得消息“show:Hello”。但是,没有显示任何内容,但没有编译器错误。我不知道问题出在哪里

protocol showSome{
   func show(str:String)
}
class client: showSome{
   var s: server?
   init(){
       s = server(str: "Hello", delegate: self)
   }    
   func setup(){
       let server = s!
       server.service()       
   }    
   func show(str: String) {
       println("show: \(str)")
   }
}
class server{
   let delegate: showSome?
   let str: String
   init(str: String, delegate: showSome){
       self.delegate = delegate
       self.str = str
   }
   func service(){
       let d = delegate!
       d.show(str)
   }
}

var c = client()
c.setup()

游乐场不显示来自
println
的输出。通过查看>助手编辑器菜单打开助手编辑器,您应该会看到它。

您的类-“服务器”-与客户端变量具有相同的名称。所以我不确定当你说

   s = server(str: "Hello", delegate: self)


我将您的类的名称更改为Server&Client,它可以按预期工作。

您的代码适合我。如果您在操场上,必须打开时间线才能看到输出转到
println()


顺便说一句:按照惯例,类名使用的是带有首字母大写的CamelCase。

println在操场上什么都不做?时间线打开了吗?是的,什么都没发生。我想也许我需要一个更稳定的版本。是的,我知道这一点,我试图在控制台中查看它,但什么都没有出现。我认为这没关系,但感谢您给出答案。我不知道是谁否决了你的评论,但我投票支持你的参与!变量名不会成为问题,因为在编译过程中,这些变量名会被otter标识符替换。在我所知道的任何语言中,将变量命名为类名都是很好的,但容易混淆。
   let server = s!
   server.service()