【问题标题】:Swift Error: Editor placeholder in source fileSwift 错误:源文件中的编辑器占位符
【发布时间】:2016-02-03 01:51:42
【问题描述】:

您好,我正在实现一个图形数据结构。当我尝试构建应用程序时,我收到错误“源文件中的编辑器占位符”

完整的图实现是从 WayneBishop 的 GitHub 中提取的,来自 https://github.com/waynewbishop/SwiftStructures

class Path {

var total: Int!
var destination: Node
var previous: Path!

init(){
    //Error happens on next line
    destination = Node(key: String?, neighbors: [Edge!], visited: Bool, lat: Double, long: Double)
     }
}

我将 Node 类更改为:

public class Node{

var key: String?
var neighbors: [Edge!]
var visited: Bool = false
var lat: Double
var long: Double

init(key: String?, neighbors: [Edge!], visited: Bool, lat: Double, long: Double) {
    self.neighbors = [Edge!]()
     }

}

到目前为止,在我构建的代码中,此错误发生了 5 次。也有人问过这个问题,但没有回答。

我认为该错误可能是由于我对Node 类中的init() 进行了更改。在我进行更改之前,它只是init()。如果是,我怎样才能将对象添加到类中?如果我的编程术语不正确,请原谅我,因为我对 OOP 比较陌生。

【问题讨论】:

  • 是的(Cmd + shift + K)暴徒生活!!!!
  • @AhmetAkkök 我不知道你做了什么来创建这样的问题,但这个错误当前与你的建议没有任何关系。他的代码是Node(key: String? String?。它期待一个值

标签: ios swift class


【解决方案1】:

有时,XCode 不会忘记具有“编辑器占位符”的行,即使您已将其替换为值。剪切 XCode 抱怨的代码部分并将代码粘贴回同一位置以使错误消息消失。这对我有用。

【讨论】:

  • 我发现剪切/粘贴效果不佳,但重建成功了。产品 -> 构建干净的文件夹,产品 -> 构建
  • 在同一行上剪切并粘贴该行会使“源文件中的编辑器占位符”静音。在我粘贴一个中等大小的代码块后,错误就开始了。
【解决方案2】:

Command + Shift + B 后,项目运行正常。

【讨论】:

    【解决方案3】:

    转到产品 > 清理构建文件夹

    【讨论】:

      【解决方案4】:

      你有这个

      destination = Node(key: String?, neighbors: [Edge!], visited: Bool, lat: Double, long: Double)
      

      上面是占位符文本,您需要插入一些值

      class Edge{
      
      }
      
      public class Node{
      
        var key: String?
        var neighbors: [Edge]
        var visited: Bool = false
        var lat: Double
        var long: Double
      
        init(key: String?, neighbors: [Edge], visited: Bool, lat: Double, long: Double) {
          self.neighbors = [Edge]()
          self.key = key
          self.visited = visited
          self.lat = lat
          self.long = long
        }
      
      }
      
      class Path {
      
        var total: Int!
        var destination: Node
        var previous: Path!
      
        init(){
          destination = Node(key: "", neighbors: [], visited: true, lat: 12.2, long: 22.2)
        }
      }
      

      【讨论】:

        【解决方案5】:

        错误是直截了当的,这是因为您在函数调用中使用了错误的占位符。在init 内部,您没有将任何参数传递给您的函数。应该是这样的

        destination = Node("some key", neighbors: [edge1 , edge2], visited: true, lat: 23.45, long: 45.67) // fill up with your dummy values
        

        或者你可以用默认方法初始化

        destination = Node()
        

        更新

        在你的 Node 类中添加空初始化器

        init() {
        
        }
        

        【讨论】:

        • 所以需要将虚拟值放入初始化程序中才能编译?
        • 它不是虚拟值,您需要使用当时可用的数据进行初始化。如果没有,您可以传递空数据。否则使用第二种方法来初始化
        • 我试过了,它返回一个错误“无法为没有参数的类型'节点'调用初始化程序`
        • 返回错误 Initializer does not override a specified initializer from its superclass......这和继承有什么关系吗?也许将目标移动到另一个文件/类?
        • 好的,我添加了一个空的初始化程序,但是除非我为变量填写虚拟值,否则它会出现“从初始化程序返回而不初始化所有存储的属性”的错误。我需要保持这种状态吗?如果是这样,我该如何添加一个新对象?
        【解决方案6】:

        清理构建文件夹 + 构建

        即使在修复代码后也会清除您可能遇到的任何错误。

        【讨论】:

          【解决方案7】:

          在我的情况下,使用 Item 而不是 item 导致了问题,这里有一个评论

          struct AspectVGrid<Item, ItemView>: View where ItemView: View, Item: Identifiable {
              var items: [Item]
              var aspectRatio: CGFloat
              var content: (Item) -> ItemView
          
          
              var body: some View {
                  let width: CGFloat = 100
                  LazyVGrid(columns: [GridItem(.adaptive(minimum: width))]) {
                      ForEach(items) { item in
                          // using Item instead of item caused the problem
                          content(Item).aspectRatio(
                                  aspectRatio,
                                  contentMode: .fit)
                      }
                  }
              }
          }
          

          【讨论】:

            【解决方案8】:

            我有同样的问题。这对我有用:

            1. 产品 -> 构建干净文件夹
            2. 产品 -> 构建

            【讨论】:

              【解决方案9】:

              如果您在使用视图控制器而不是 UI 元素创建 segue 时遇到此错误,则必须将 sender: Any? 更改为此

              @IBAction func backButtonPressed(_ sender: Any) {
                      performSegue(withIdentifier: "goToMainScreen", sender: self)
              
                  }
              

              它会起作用的。

              【讨论】:

                猜你喜欢
                • 2017-05-04
                • 2016-09-18
                • 2019-04-30
                • 1970-01-01
                • 2020-02-22
                相关资源
                最近更新 更多