共享变量

哈雷什·贾扬蒂

通过构建我的第一个应用程序绊倒我的方式。试图将一个视图控制器(“ ViewController”)中的变量传递给另一个视图控制器(“ SecondViewController”)。我在Stack Overflow上找到了一些代码,但遇到错误,不确定自己在做什么。在第一个视图控制器中有:

func prepareForSegue(segue: UIStoryboardSegue!, sender: Any!) {
                        if (segue.identifier == "segueTest") {
                        //Checking identifier is crucial as there     might be multiple
                        // segues attached to same view
                        var secondVC = segue!.SecondViewController as     ViewController;
                        secondVC.toPass =  "email"

                            }
                        }

在第二个视图控制器中,我有:

var toPass:字符串!

不过,我在第一个视图控制器中遇到错误:“类型的值没有成员”(见图)

我很困惑这是为什么。我将不胜感激任何建议。2

(Swift 3?)我发布了下面两个视图控制器的所有代码,看看是否有帮助。我为代码的混乱道歉。这是第一个视图控制器代码:

import UIKit
import FBSDKLoginKit

extension UserDefaults {
    // check for is first launch - only true on first invocation    after app install and sends user to answer questions

    static func isFirstLaunch() -> Bool {
        let hasBeenLaunchedBeforeFlag = "hasBeenLaunchedBeforeFlag"
        let isFirstLaunch = !UserDefaults.standard.bool(forKey: hasBeenLaunchedBeforeFlag)
        if (isFirstLaunch) {
            UserDefaults.standard.set(true, forKey: hasBeenLaunchedBeforeFlag)
            UserDefaults.standard.synchronize()
        }

        print(hasBeenLaunchedBeforeFlag)
        return isFirstLaunch
    }
}

class ViewController: UIViewController, FBSDKLoginButtonDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        let loginButton = FBSDKLoginButton()
        view.addSubview(loginButton)
        loginButton.frame = CGRect(x: 16, y: 350, width:   view.frame.width - 32, height: 50)
        loginButton.delegate = self

        self.view.backgroundColor = UIColor(patternImage:   UIImage(named:"Book Funnel")!)

    }

    func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) {
        print("Did log out of Facebook")
    }

    //Gather Facebook demographic information

    func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {
        if error != nil {
            print(error)
            return
        }

        let login: FBSDKLoginManager = FBSDKLoginManager()
        // Make login and request permissions
        login.logIn(withReadPermissions: ["email", "public_profile"], from: self, handler: {(result, error) -> Void in

            if error != nil {
                // Handle Error
                NSLog("Process error")
            } else if (result?.isCancelled)! {
                // If process is cancel
                NSLog("Cancelled")
            }
            else {
                // Parameters for Graph Request
                let parameters = ["fields": "email, name"]

                FBSDKGraphRequest(graphPath: "me", parameters: parameters).start {(connetion, result, error) -> Void in
                    if error != nil {
                        NSLog(error.debugDescription)
                        return
                    }

                    // Result
                    print("Result: \(result)")

                    // Handle vars
                    if let result = result as? [String:String],
                        let email: String = result["email"],
                        let fbId: String = result["id"] {
                        print("Email: \(email)")
                        print("fbID: \(fbId)")

                        func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) {
                            if segue!.identifier == "segueTest" {
                                if let secondVC = segue!.SecondViewController as? ViewController {
                                    secondVC.toPass =  "email"
                                }
                            }
                        }


                }
                }
            }
        })


    func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.

            }
        }
    }

第二个视图控制器代码:

import UIKit
import FBSDKCoreKit
import FBSDKLoginKit


class SecondViewController: UIViewController {


    @IBOutlet weak var sliderLabel: UILabel!

    @IBOutlet weak var verticalSlider: UISlider!
           {
                didSet{
                    verticalSlider.transform =   CGAffineTransform(rotationAngle: CGFloat(-M_PI_2))


                }
        }

        //Change label as slider moves

        @IBAction func verticalSliderChanged(_ sender: UISlider) {

            var currentValue = Double(sender.value);

            sliderLabel.text = "\(currentValue)"

    }

    @IBOutlet weak var ratingSubmitted: UIButton!

    @IBAction func checkmarkPressed(_ sender: Any) {


                func viewDidLoad() {
                super.viewDidLoad()

                self.view.backgroundColor = UIColor(patternImage:   UIImage(named:"Book Funnel")!)

            }
    }


    @IBOutlet weak var checkmarkButton: UIButton!

    @IBAction func checkmarkButtonPressed(_ sender: Any) {

        let img:UIImageView = UIImageView(frame: CGRect(x: 30, y: 180, width: 250, height: 320))

    let randomImage = arc4random()
    if (randomImage % 3 == 0) {
    img.image = UIImage(named: "hero.jpg")
    } else if (randomImage % 3 == 1) {
    img.image = UIImage(named: "hillary.jpg")
    } else {
    img.image = UIImage(named: "thistimeisdifferent.jpg")
    }


    //        img.contentMode = UIViewContentMode.ScaleAspectFill
    //        img.backgroundColor = UIColor.redColor()
    self.view.addSubview(img)

        var toPass: String!

    }


            override func didReceiveMemoryWarning() {
                super.didReceiveMemoryWarning()
                // Dispose of any resources that can be recreated.

            }


            }
dfd

您对第二个视图控制器的转换是错误的,因此它不知道其中的变量toPass

尝试更改此:

var secondVC = segue!.SecondViewController as     ViewController;

对此:

if let secondVC = segue.destination as? SecondViewController {
    secondVC.toPass =  "email"
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在.c文件之间共享全局变量

来自分类Dev

在整个包中共享全局变量

来自分类Dev

具有全局变量的共享实例

来自分类Dev

Docker使用卷共享环境变量

来自分类Dev

在.c文件之间共享全局变量

来自分类Dev

在Javascript模块之间共享的全局变量

来自分类Dev

具有全局变量的共享实例

来自分类Dev

Python中的全局变量可在文件之间共享变量

来自分类Dev

Python中的全局变量可在文件之间共享变量

来自分类Dev

全局变量?跨多个脚本共享变量?

来自分类Dev

共享库中的静态变量

来自分类Dev

数据共享,静态变量和管道

来自分类Dev

避免对共享的静态变量执行“同步”

来自分类Dev

两线程共享静态变量

来自分类Dev

与Matlab中的批处理过程共享全局变量

来自分类Dev

Lambda表达式如何共享局部变量?

来自分类Dev

ASPNET中全局变量的缓存或共享类

来自分类Dev

类中的全局变量共享给其他实例

来自分类Dev

如何通过延迟初始化共享全局变量?

来自分类Dev

不同文件之间共享全局变量

来自分类Dev

在bash和鱼之间共享环境变量

来自分类Dev

环境变量将共享库列入黑名单?

来自分类Dev

Ruby-与obj的本征类共享局部变量

来自分类Dev

与Matlab中的批处理过程共享全局变量

来自分类Dev

Docker-与引用的卷容器共享环境变量

来自分类Dev

封闭混乱,在功能之间共享全局变量

来自分类Dev

Python仅对函数内部的函数共享全局变量

来自分类Dev

取消共享运行时的环境变量

来自分类Dev

在共享主机上刷新 Laravel 环境变量

来自分类Dev

如何定义稍后在 Julia 中共享的全局变量