簡體   English   中英

斯威夫特'使用未聲明類型'

[英]Swift 'use of undeclared type'

我目前正在嘗試在swift中編寫一個小iOS應用程序,其中我有這些類: masterTableViewController addViewControllerdeleteViewController ,它們中的每一個都連接到一個,就像名字已經告訴的那樣,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 MIGHT不認為該文件是目標的成員,即使'Utilities'窗格的'Target Membership'部分中的復選框顯示該文件是項目目標的成員。 解決方法是取消選中並重新檢查使文件成為目標成員的復選框。 Xcode將重新索引項目文件,並希望現在將文件視為目標的成員。

我意識到你已經有了一個公認的答案,但我一直在追逐這個錯誤太久了,最后找到了我的問題的原因所以也許它會幫助別人保持理智。

我在嘗試集成Google admob sdk時遇到了這個問題。

以下是我調試的步驟:

  1. 添加了“導入GoogleMobileAds”到視圖控制器的頂部。
  2. 使用CocoaPods添加了框架,嘗試再次手動添加它。
  3. 檢查了“構建設置”中的標題搜索路徑以及框架搜索路徑。 驗證路徑實際指向我想要添加的框架。
  4. 檢查框架是否包含在我試圖構建的目標中。
  5. 清理並嘗試運行,重新啟動並嘗試運行。
  6. 重新訪問的構建設置,注意到的框架搜索路徑有一個帶連字符的路徑“ - ”(my_base_dir / my_project_dir / Pods / Google-Mobile-Ads-SDK / Frameworks)。 我之前遇到連字符問題,所以我將連字符改為強調“_”,突然Xcode解決了“未聲明的類型”錯誤。

顯然Xcode不喜歡框架搜索路徑中的連字符。

如果要編譯的類包含在單元測試模塊中,但未定義的類不包含,則會發生這種情況。

您會發現應用程序編譯並運行,但編譯錯誤可能會顯示在源代碼中。

打開右側欄並檢查目標成員資格設置。 它們應該對兩個類都一致。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM