【问题标题】:Issue using protocol to connect two classes in swift language使用协议以快速语言连接两个类的问题
【发布时间】:2014-06-20 15:46:35
【问题描述】:

我使用 Playground 并尝试在下面的简单代码中获取消息“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 在操场上什么都不做?你有时间线吗?
  • 是的,什么也没发生。我想也许我需要一个更稳定的版本。

标签: swift swift-playground


【解决方案1】:

您的代码对我有用。如果您在操场上,则必须打开时间线才能看到输出 go println()

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

【讨论】:

    【解决方案2】:

    Playground 不显示来自println 的输出。通过 View > Assistant Editor 菜单打开 Assistant Editor,您应该会看到它。

    【讨论】:

    • 是的,我知道这一点,我试图在控制台中查看它,但没有任何显示。
    【解决方案3】:

    您的类 - “服务器” - 与您的客户端变量同名。所以我不确定你说的时候会发生什么

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

       let server = s!
       server.service()       
    

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

    【讨论】:

    • 我认为没关系,但感谢您给出答案。我不知道谁会否决您的评论,但我投票支持您的参与!
    • 变量名不会成为问题,因为在编译期间这些变量名会被替换为 otter 标识符。并且用我知道的任何语言命名一个变量就像一个类名都很好——但令人困惑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多