Swift 从appDelegate访问viewController结构

Swift 从appDelegate访问viewController结构,swift,xcode,Swift,Xcode,我在ViewController中定义了一个结构,如下所示: struct Meme { var topText : String var bottomText : String var originalImage : UIImage var memedImage: UIImage } 现在,当我尝试使用以下代码从appDelegate访问结构时,我得到一个未解决的标识符错误: var memes = [Meme]() 有人能解释为什么会发生这种情况,以及我如何从appDelegate访问v

我在ViewController中定义了一个结构,如下所示:

struct Meme {
var topText : String
var bottomText : String
var originalImage : UIImage
var memedImage: UIImage
}
现在,当我尝试使用以下代码从appDelegate访问结构时,我得到一个未解决的标识符错误:

var memes = [Meme]()
有人能解释为什么会发生这种情况,以及我如何从appDelegate访问viewController结构吗


谢谢

如果没有类的实例,则无法访问该类的属性

AppDeletegate
文件中执行以下操作:

  // create instance of your viewcontroller class
  let viewController = ViewController() 
  // access the property
  viewController.memes = [Meme]()

如果没有类的实例,则无法访问该类的属性

AppDeletegate
文件中执行以下操作:

  // create instance of your viewcontroller class
  let viewController = ViewController() 
  // access the property
  viewController.memes = [Meme]()

这可以通过另一种方式实现:

import UIKit

var memes = [Meme]()

class ViewController: UIViewController {

}
好的,这些模因不在UIViewController的范围内,但它们在同一个文件中,就像这样,它们是全局变量

class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        print(memes[0].bottomText)

        return true
    }

祝你一切顺利。

这可以通过另一种方式:

import UIKit

var memes = [Meme]()

class ViewController: UIViewController {

}
好的,这些模因不在UIViewController的范围内,但它们在同一个文件中,就像这样,它们是全局变量

class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        print(memes[0].bottomText)

        return true
    }

祝您一切顺利。

假设结构如您所说是在ViewController类中定义的,您将需要使用ViewController的命名空间以以下方式访问它:

var memes = [MyViewController.Meme]()

假设结构是在ViewController类中定义的,如您所说,您将需要使用ViewController的命名空间以以下方式访问它:

var memes = [MyViewController.Meme]()


我早就知道了。抱歉,更新延迟。有相同问题的人,请创建一个名为“Meme.swift”的新swift文件,然后在该文件中写入Meme结构。你的问题现在应该解决了。谢谢

我早就知道了。抱歉,更新延迟。有相同问题的人,请创建一个名为“Meme.swift”的新swift文件,然后在该文件中写入Meme结构。你的问题现在应该解决了。谢谢

显示更多代码以查看上下文。为什么需要此选项?这是针对Udacity项目的,我遇到了完全相同的问题。请在找到解决方案时更新,我也会这样做。应用程序委托似乎无法识别结构成员。不幸的是,根据本课程的说明,我们必须在appDelegate中使用此结构作为共享模型,因此解决方法无法解决此问题。我早就发现了这一点。抱歉,更新延迟。有相同问题的人,请创建一个名为“Meme.swift”的新swift文件,然后在该文件中写入Meme结构。你的问题现在应该解决了。谢谢显示更多代码以查看上下文。为什么需要此选项?这是针对Udacity项目的,我遇到了完全相同的问题。请在找到解决方案时更新,我也会这样做。应用程序委托似乎无法识别结构成员。不幸的是,根据本课程的说明,我们必须在appDelegate中使用此结构作为共享模型,因此解决方法无法解决此问题。我早就发现了这一点。抱歉,更新延迟。有相同问题的人,请创建一个名为“Meme.swift”的新swift文件,然后在该文件中写入Meme结构。你的问题现在应该解决了。谢谢此解决方案会导致另一个错误“无法调用非函数类型“[MemeViewController.Meme.type]”。X-Code建议可以通过删除“()”来解决此问题,但这只会导致更多错误。这将是[MemeViewController.Meme]()。无需放置
。键入
。然后我会确保在顶层声明结构(而不是在任何类中)。然后您应该能够按照课程所述使用它。问题是,示例是在类内编写的!非常感谢。它可以按照OP显示的方式编写,但需要在视图类的上方/外部。此解决方案会导致另一个错误“无法调用非函数类型的值”[MemeViewController.Meme.type]”。X-Code建议可以通过删除“()”来解决此问题,但这只会导致更多错误。这应该是[MemeViewController.Meme]()。无需放入
.Type
。我会确保您的结构是在顶层声明的(而不是在任何类中)。然后你应该能够像课程所描述的那样使用它。问题是这个例子是在课堂上写的!非常感谢你。它可以按照OP显示的方式编写,但需要在view类之上/之外。