Ios 斯威夫特';使用未声明的类型';

Ios 斯威夫特';使用未声明的类型';,ios,swift,Ios,Swift,我目前正在尝试用swift编写一个小的iOS应用程序,在这里我有以下几个类: masterTableViewControlleraddViewController和deleteViewController,它们都连接到一个viewController,正如名称所示。masterTableViewController应使用预定义功能发送一些数据: override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!)

我目前正在尝试用swift编写一个小的iOS应用程序,在这里我有以下几个类:
masterTableViewController
addViewController
deleteViewController
,它们都连接到一个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不是可以分配给变量的类型

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


在参考资料中,我得到了这段代码,一切都很好

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

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

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

并查看它是否有效

另一种可能会出现神秘的“使用未声明的类型”的情况:该类型(此处为DeleteViewController类)是在一个文件中定义的,您可以通过更改“实用程序”窗格的“名称”文本框来重命名该文件。然后,Xcode可能不会认为该文件是目标的成员,即使“实用程序”窗格的“目标成员资格”部分中的复选框显示该文件是项目目标的成员。解决方法是取消选中并重新选中使文件成为目标成员的复选框。XCODE将重新索引项目文件,希望现在将该文件视为目标的成员。

我意识到您已经有了一个可接受的答案,但是我一直在追寻这个错误太久,最终找到了我的问题的原因,也许它会帮助某人保持理智。 我在尝试集成Google admob sdk时遇到了这个问题

以下是我调试的步骤:

  • 将“导入GoogleMobileAds”添加到视图控制器的顶部
  • 使用CocoaPods添加了框架,并再次尝试手动添加
  • 检查了生成设置中的标题搜索路径以及框架搜索路径。验证了路径实际上指向了我想要添加的框架
  • 检查框架是否包含在我试图构建的目标中
  • 清理并尝试运行,重新启动并尝试运行
  • 重新查看构建设置时,注意到框架搜索路径的路径带有连字符“-”(my_base_dir/my_project_dir/Pods/Google Mobile Ads SDK/Frameworks)。我以前遇到过连字符问题,所以我将连字符改为下划线“\ux”,突然Xcode解决了“未声明类型”错误

  • 因此,显然Xcode不喜欢框架搜索路径中的连字符。

    如果您正在编译的类包含在单元测试模块中,但未定义的类不包含在单元测试模块中,则可能会出现这种情况

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

    打开右侧栏并检查目标成员资格设置。对于这两个类,它们应该是一致的