从函数返回数据 (Swift)

2024-03-29

我正在尝试返回结果并能够从此函数访问结果数组。函数中的一切都正常工作,但是我无法返回任何内容或访问结果或从闭包外部在函数内部创建的任何变量。我想从闭包外部访问 result.valueForKey("id") 。我怎样才能做到这一点?

class ViewController: UIViewController, FBSDKLoginButtonDelegate {

var facebookid: NSString = ""
var username: NSString = ""
var userEmail:NSString = ""

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    if (FBSDKAccessToken.currentAccessToken() == nil)
    {
        let loginView : FBSDKLoginButton = FBSDKLoginButton()
        self.view.addSubview(loginView)
        loginView.center = self.view.center
        loginView.readPermissions = ["public_profile"]
        loginView.delegate = self

    } else {

        returnUserData()

        println(facebookid)  // This doesn't work

    }
}



    func returnUserData()
{

    let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)
    graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in

        if ((error) != nil)
        {
            // Process error
            println("Error: \(error)")
        }
        else
        {

            self.facebookid = result.valueForKey("id") as NSString!
            self.username = result.valueForKey("name") as NSString!
            self.userEmail = result.valueForKey("email") as NSString!
            println(result) // This works


        }
    })
}

编辑:我确实根据下面的两个答案更改了代码,但仍然无法在 viewDidLoad 闭包上获得任何数据返回。 * println(facebookid) 不会在 ViewDidLoad 中返回任何内容,而它会在函数的闭包内返回任何内容。


您正在闭包内部创建变量,这意味着它们只能在内部访问。

您需要在类顶部的函数外部创建变量。

例如

 class YourClassName {

      var facebookid
      var username
      var userEmail


 func returnUserData()
 {
     let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath:  "me", parameters: nil)
     graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in

    if ((error) != nil)
    {
        // Process error
        println("Error: \(error)")
    }
    else
    {
        self.facebookid = result.valueForKey("id") as? String
        self.userName = result.valueForKey("name") as? String
        self.userEmail = result.valueForKey("email") as? String

    }
  })
 }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从函数返回数据 (Swift) 的相关文章

  • 如何将任意颜色的色度键滤镜应用到实时摄像头源ios?

    基本上我想将色度键滤镜应用到 ios 实时摄像头源 但我希望用户选择将被另一种颜色替换的颜色 我找到了一些使用绿屏的示例 但我不知道如何动态替换颜色而不仅仅是绿色 知道如何以最佳性能实现这一目标吗 您之前曾询问过我的情况GPUImage h
  • 点击后退按钮时,iCarousel 会显示在上一页

    当我按下后退按钮时 这iCarousel仍然显示 1 秒 为什么会发生这种情况以及如何阻止这种情况 我已经使用故事板创建了 iCarosel 视图 void viewDidUnload super viewDidUnload self ca
  • 如何在iOS应用程序中实现信号量?

    是否可以在ios应用程序中实现计数信号量 对的 这是可能的 有很多可用的同步工具 同步 NSLock NS条件 NS条件锁 GCD 信号量 并行线程锁 我建议阅读 线程编程指南 http developer apple com librar
  • Android 和 IOS 是否可以在后台发送短信?

    我想制作一个应用程序 其主要功能取决于发送短信 在我开发 android native 之前 但现在我使用 React Native 来为 IOS 和 Android 制作它 在 Android 中 如果获得用户许可 可以在后台发送短信 但
  • 更改“返回”键盘按钮的文本

    如何将 返回 按钮的标准文本更改为其他内容 我希望它是 添加 不幸的是 您可以使用以下命令将 Return 更改为这些预定义标签之一 returnKeyType财产 返回 默认 Go Google Join Next Route Searc
  • RestKit链接器错误

    我一直遵循 RestKit 安装说明 但现在在尝试构建应用程序时出现错误 这是针对 ios iPad 的 我收到 命令 Developer Platforms iPhoneSimulator platform Developer usr b
  • XCODE:如何从设备获取/验证准确的时间戳

    在没有互联网连接的情况下是否可以获得 NTP 或准确的时间戳 我不能接受 不信任带有 NSDate date 的设备时间戳 因为它可以由用户修改 并且我的应用程序将通过修改系统日期和时间而被黑客攻击 除此之外 是否有任何方法可以检查系统日期
  • iOS中拖动时如何修改UIVisualEffectView的模糊度?

    目前 我正在使用 UIVisualEffectView 对图像应用模糊 我有一个 UIScrollView 当我在 scrollViewDidScroll 方法中向下拉滚动视图时 我正在更改 UIVisualEffectView 的 alp
  • 在实现文件中声明接口(Objective-C)

    在上一个版本的 xCode 4 3 中 我看到了预定义模板 例如我们的 Master Detail 模板 其中接口声明是在 m 文件中进行的 例如 在文件 MyFile h 中有 interface MyFile property nona
  • XcodeColors 在 XCode 5 中不起作用

    我尝试安装XcodeColors在 XCode 5 中 但不幸的是 它不能与我从 XCode 4 6 获得的旧插件一起使用 下一步 我检查了 github 网站 在那里我看到了以下拉取请求 提供了 XCode 5 的工作版本 https g
  • 在 SwiftUI App 中实现深色模式切换

    我目前正在我的应用程序中研究深色模式 虽然由于我的 SwiftUI 基础 深色模式本身并不困难 但我正在努力选择将 ColorScheme 设置为独立于系统 ColorScheme 的选项 我在苹果人机界面指南中找到了这一点 https i
  • UIView 内的 UIButton 目标操作

    我有一个习惯UIView我创建了一个UIButton 在该视图中 我有以下代码 func setupViews menuControlButton addTarget self action toggleButton forControlE
  • 如何安全地将 CGFloat 降低或提高到 int?

    我经常需要在地板或天花板上安装CGFloat to an int 用于计算数组索引 我永远看到的问题floorf theCGFloat or ceilf theCGFloat 是浮点不准确可能会带来麻烦 那如果我的CGFloat is 2
  • 如何在WKInterfaceLabel下面放置一个WKInterfaceLabel?

    大家好 我在 watchkit 开发中有新的东西 我有特殊要求 我将一个 WKInterfaceLabel 安排在另一个 WKInterfaceLabel 下面 我尝试使用很多关闭选项 例如编辑位置 但 WKInterfaceLabel 未
  • 如何在ios上定义可达性超时

    我使用 Reachability 类来了解我是否有可用的互联网连接 问题是当wifi可用但不能上网时 NetworkStatus currentReachabilityStatus方法花费太多时间 my code Reachability
  • 协议本身不符合?

    为什么这段 Swift 代码无法编译 protocol P struct S P let arr P S extension Array where Element P func test
  • GIDSignIn 在提示前指定范围

    我在 iOS 上升级到 GoogleSignIn 6 0 但找不到在登录时指定登录范围的方法 我只能看到一个名为 addScopes 的 API 我可以在基本登录后指定范围 但这会导致两个单独的登录提示 这很奇怪 之前 我们可以简单地指定登
  • 如何获取 ios 日期数组中的所有星期日

    我只想要一个数组 它以 NSDate 的形式包含一年中的所有星期一 但速度很快 我在 Objective c 中使用以下代码 但不知道如何在 swift 中使用它 NSDate pickerDate NSDate date NSLog pi
  • 在 swift 中从本地视频创建缩略图

    如何从本地视频文件快速创建缩略图 例如 如果视频文件路径位于此处 file Users Dev Library Developer CoreSimulator Devices F33222DF D8F0 448B A127 C5B03C64
  • iOS Swift 中断键盘事件

    我在拦截键盘事件时遇到问题 我已将我的 iOS 与 SteelSeries Free 游戏手柄控制器 连接 当连接到 iOS 时 它将被检测为蓝牙键盘 这是在我打开Notes时测试的 按下游戏手柄上的任何按钮都会写一个字母 我需要拦截此按钮

随机推荐

  • SQL中的case语句,如何返回多个变量?

    我想在我的 case 语句中返回多个值 例如 SELECT CASE WHEN
  • Swift 3 中的协议扩展 [重复]

    这个问题在这里已经有答案了 我想要一个默认属性UIImageView 这将是isFlipped 我可以通过子类化来做到这一点UIImageView并添加一项属性isFlipped 但我想使用此协议和扩展 但一段时间后它崩溃了 下面是我的代码
  • 无法从 root(或 sudo)使用 NVM

    我注意到我的应用程序在运行时使用不同版本的 NodeJSsudo node v v0 10 23 sudo node v v0 11 8 pre This v0 11 8 pre给我带来了一些问题 所以我绝对不想使用它 但我无法将其更改为r
  • ANTLR 生成无效的 java 异常并抛出代码

    这些天我一直在使用 ANTLRwork 1 5 和 Antlr Runtime 3 5 这是我发现的一个奇怪的事情 Antlr 正在为我生成这种 java 代码 public final BLABLABLAParser addExpress
  • 如何正确关闭MappedByteBuffer?

    这是我正在运行的代码 import java io RandomAccessFile import java nio MappedByteBuffer import java nio channels FileChannel public
  • S/mime 时间戳支持

    好的 现在我已经有了来自 TS 提供商的时间戳 我该如何将其放入哑剧消息中才能符合标准 据我所知 没有邮件程序支持时间戳 这不会成为问题 因为我将自己处理 mime 消息 不过我想让它成为标准方式 有什么例子吗 Thanks 我认为 Mic
  • 名称中的前导箭头在 clojure 中意味着什么

    在学习 Clojure 时 我遇到了如下代码 gt defrecord Person name age user Person gt gt Person john 40 user Person name john age 40 gt Per
  • 部分模板专业化歧义

    我不明白为什么 main 中的语句不明确 template
  • 如何在hibernate注释类中使两列作为主键

    这是我的注释类 我想要userId and groupId列都作为主键 我发现了更多问题 Question https stackoverflow com q 10422680 3156758 关于这个 但没有找到相关答案 我的声誉较差 所
  • 在构建路径中出现 JRE 系统库未绑定错误

    在构建路径中出现 JRE 系统库未绑定错误 尝试了以下链接中的所有建议 但不起作用 我有jdk 1 6 0 29 我也尝试安装其他版本但没有帮助 JRE 系统库 WebSphere v6 1 JRE 未绑定 https stackoverf
  • Rails 中的 example.com/controller 和 example.com/controller/ 有什么区别?

    我有一个 PostsController 对于示例来说不是必需的 但在粘贴片段时会有所帮助 并且我正在使用current page 顾名思义 找出正在显示的页面 我得到了看起来很奇怪的结果 current page 如果我去的话会返回不同的
  • 如何在 Python 2.7 中实现 GMRES 的 ILU 预处理器?

    我正在尝试比较带 ILU 预处理器和不带 ILU 预处理器的 GMRES 求解器 当未应用预处理器时 它会运行并提供正确的答案 x 1 1 1 但是 我似乎无法找到正确应用预处理器的方法 如何让这段代码与 ILU 预处理器一起运行 impo
  • 具有大量动态子域的站点的站点地图

    我正在运行一个允许用户创建子域的网站 我想通过站点地图将这些用户子域提交给搜索引擎 但是 根据站点地图协议 和 Google 网站管理员工具 单个站点地图只能包含来自单个主机的 URL 最好的方法是什么 目前我有以下结构 站点地图索引位于
  • 递归展开树

    我正在尝试实现一个自下而上的递归展开树 我递归到需要展开的节点 并找到该节点的父节点和祖父节点 然后我就可以根据情况选择之字形或之字形 问题是完成此操作后 我将已展开一次的节点返回到先前的递归调用 先前的递归调用引用了该节点的父节点 该节点
  • ListView 行样式 - 左对齐文本和右对齐图标

    我试图让 ListView 行如下所示 Text Text Text
  • MongoDB 数据库,相当于 SELECT column1, column2 FROM tbl

    从我的 MongoDB 中我想要相当于 SELECT column1 column2 FROM tbl 通过这段代码 我得到了所有的 行 也得到了所有的 列 DBCollection collection database getColle
  • Winforms C# Outlook 风格日历

    我的任务是在 winforms C 应用程序中重新创建 MS Access 日历 我为用户创造的东西 他们讨厌 基本上 我正在将数据转储到 DataGridView 中 他们可以按月 日或员工进行搜索以获取日历事件 他们要求重新设计 使其看
  • Alamofire 具有用于快速应用程序的自定义参数编码

    我必须在我的 swift 应用程序中从 SOAP Web 服务调用一些方法 所以我认为我应该使用自定义参数编码 但是当我为此编码创建闭包时 它似乎永远不会被调用 难道我做错了什么 这是我的代码 let custom URLRequestCo
  • Spring 4,JPA,关闭控制台调试消息

    我有一个基本的 Spring 4 JPA 应用程序 我使用所有 Java 配置 根本没有 XML 我想关闭控制台调试消息 我看到了很多关于此的问题并尝试了解决方案 但我仍然看到了所有消息 控制台消息如下所示 14 58 29 301 mai
  • 从函数返回数据 (Swift)

    我正在尝试返回结果并能够从此函数访问结果数组 函数中的一切都正常工作 但是我无法返回任何内容或访问结果或从闭包外部在函数内部创建的任何变量 我想从闭包外部访问 result valueForKey id 我怎样才能做到这一点 class V