如何显示为特定协议实现的必要方法

How to show necessary methods to be implemented for specific protocol

我绝对是 IOS 和 XCode 以及 swift 的初学者,我正在用 Xcode 中的 Yosemite 进行第一次尝试Windows7 下的 Vmware 运行(来宾是 MAC yosemite,主机是 windows 运行 vmware workstation 9 )

我的 IOS 项目中有一个 ViewController Class 声明如下:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {...}

现在我想实现协议 UIViewController 和 UITableViewDelegate 的必要方法。

教程中

http://jamesonquave.com/blog/developing-ios-apps-using-swift-tutorial/

它说我必须在协议上使用 Command+Click 来显示应该实施哪些方法。

我不知道如何使用我的 vmware "command+click on the protocoll"。

有什么提示吗?

当使用 Alt 键并单击协议时,它会向我显示帮助。如果我是 WindowsButton + 单击协议,它会打开一个新的 window,其中包含协议的源代码。现在如何显示应该实现的方法。

当您 windows 单击协议名称跳转到其定义时,您做的是正确的,它基本上只是一个列表,其中包含您可以复制并粘贴到您的代码中的所有方法


编辑 下面是用于更改键盘的:


您可以尝试交换密钥,例如 this:

我不喜欢放置外部源链接,因为它们有时会消失,所以下面是它们如何做的文字:

要交换 Option/Alt 键和 Command/Windows 键:

融合 2.x 及更高版本

  1. 转到 VMware Fusion > 首选项。
  2. 点击键盘和鼠标,然后点击键映射。
  3. 找到具有Mac选项快捷方式的行, 并双击它进行编辑。

    • 如果您没有看到这一行,请单击 + 按钮,然后 select 顶行键中的选项。
  4. 在键的底部行的映射中,确保 Alt 不是 选择并且 Windows 标志是 selected.This 将确保 按 Option 键会将 Windows 键发送到虚拟机 机器。

  5. 点击确定。
  6. 查找具有 Mac 快捷方式的行 命令键标志,然后双击它进行编辑。

    • 如果您没有看到这一行,请单击 + 按钮,然后 select 顶行键中的命令键徽标。
  7. 在 To mapping 的底部行中确保 Windows 徽标未 selected 且 Alt 为 selected.This 将确保 按下 Command 键会将 Alt 键发送到虚拟 机器。单击确定。

融合1.x

  1. 关闭虚拟机并退出 Fusion。
  2. 导航至 [Macintosh HD]//Library/Preferences/VMware Fusion
  3. 按住 Ctrl 键并单击配置文件,然后 select 打开方式。
  4. Select TextEdit 然后点击打开。添加行:

    -mks.keyboard.swapAlt = TRUE

当你的虚拟机启动时,Option/Alt键和Command/Windows键是相反的。

为了帮助您,UIViewController 是一个 class,您正在对其进行子class。它不是一个协议,所以它没有任何必要的方法供您实现。但是,您可以覆盖继承的方法,这是您第一次创建文件时看到的方法,例如

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

这会覆盖您从 UIViewController 继承的方法。如果您除了调用 super.viewDidLoad() 之外没有做任何事情,您可以从代码中删除整个函数。

现在有 UITableViewDataSource 和 UITableViewDelegate 或这两种协议,因此它们可能有也可能没有实现所需的方法。

您在按住 Alt 键并单击时描述的内容与您右键单击 UITableViewDataSource 并选择跳转到定义相同。这就是当您命令单击实际 Mac 时得到的结果。本教程所说的是所需的方法将位于顶部,如果您查看文档,情况并非总是如此(因为这些方法更多地是按目的组织的)。在 UITableViewDataSource 的情况下,您应该看到类似的内容:

protocol UITableViewDataSource : NSObjectProtocol {

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int

// Row display. Implementers should *always* try to reuse cells by setting each cell's reuseIdentifier and querying for available reusable cells with dequeueReusableCellWithIdentifier:
// Cell gets various attributes set automatically based on table (separators) and data source (accessory views, editing controls)

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell

optional func numberOfSectionsInTableView(tableView: UITableView) -> Int // Default is 1 if not implemented

optional func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? // fixed font style. use custom view (UILabel) if you want something different
optional func tableView(tableView: UITableView, titleForFooterInSection section: Int) -> String?

你会注意到前两个方法func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Intfunc tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell前面没有optional。这意味着这些是该协议所需的方法。下面的可选的是可选的。

在 UITableViewDelegate 的情况下,您会看到没有非可选方法,因此不需要您实现任何方法。