斯威夫特使用未申报的类型'

时间:2014-09-25 14:12:24

标签: ios swift

我目前正在尝试在swift中编写一个小应用程序,我有这些类:  masterTableViewController addViewControllerdeleteViewController,每个都连接到a,就像名称已经告诉的那样,viewController。 masterTableViewController应该使用预定义的函数发送一些数据:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {

  if(segue.identifier == "showDetails") {
    var selectedIndexPath:NSIndexPath = self.tableView.indexPathForSelectedRow()!

    var deleteViewController:deleteViewController = segue!.destinationViewController as deleteViewController

    deleteViewController.todoData = todoItems.objectAtIndex(selectedIndexPath.row) as NSDictionary
}

我想通过segue引用的控制器将当前行的数据发送到下一行。

这是我收到一条错误消息,指出deleteViewController不是可以分配给变量的类型。

但我真的不明白现在的问题是什么。基本上这应该工作,因为我只想创建一个我的类所属类型的新对象,并将其传递给我的视图控制器。

在参考资料中,我从一切工作中得到了这个代码。

4 个答案:

答案 0 :(得分:6)

您正在混合类名和实例变量名。类名应为大写:MasterTableViewController,AddViewController,DeleteViewController

首先,尝试通过选择不同的名称来区分类名和实例变量名,即:

var dvc:deleteViewController = segue!.destinationViewController as deleteViewController
dvc.todoData = ...

看看它是否有效

答案 1 :(得分:2)

另一种情况,你可能会神秘地使用未声明的类型':类型(这里是DeleteViewController类)是通过更改名称'来重命名的文件中定义的。 '公用事业'的文本框窗格。然后Xcode MIGHT不认为该文件是目标的成员,即使目标成员资格中的复选框是' &Utilities'部分窗格显示文件是项目目标的成员。解决方法是取消选中并重新检查使文件成为目标成员的复选框。 Xcode将重新索引项目文件,并希望现在将文件视为目标的成员。

答案 2 :(得分:0)

我意识到你已经有了一个可以接受的答案,但是我已经追了很久这个错误,最后找到了我的问题的原因所以也许它可以帮助别人保持理智。

我在尝试集成Google admob sdk时遇到了这个问题。

以下是我调试的步骤:

  1. 添加'导入GoogleMobileAds'到视图控制器的顶部。
  2. 使用CocoaPods添加了框架,再次尝试手动添加它。
  3. 检查构建设置中的标题搜索路径以及框架搜索路径。验证了路径实际上指向了我想添加的框架。
  4. 检查该框架是否包含在我尝试构建的目标中。
  5. 清理并尝试运行,重新启动并尝试运行。
  6. 重新访问的构建设置,注意到框架搜索路径有一个带连字符的路径" - " (my_base_dir / my_project_dir /荚/的谷歌 - 移动 - 广告-SDK /框架)。我之前遇到连字符问题所以我将连字符改为下划线" _"突然Xcode解决了未申报的类型'错误。
  7. 显然Xcode并不喜欢框架搜索路径中的连字符。

答案 3 :(得分:0)

如果要编译的类包含在单元测试模块中,但未定义的类不包括在内,则会发生这种情况。

您会发现该应用程序已编译并运行,但编译错误可能会显示在源代码中。

打开右侧栏并查看目标会员设置。它们应该对两个类都一致。