2017-04-06 106 views
3

所以我有一个功能,检查用户是否正在查看他们的个人资料。这是我的功能。为什么return语句不会停止程序?

func isUserViewCurrentUser() -> Bool { 
    guard let user = userDataDelegate?.userData() else { 
     return false 
    } 

    if user == Current.user { 
     print("returning false: USER IS CURRENT USER") 
     return false 
    } else { 
     print("returning true: USER IS NOT CURRENT USER") 
     return true 
    } 

} 

然后,我只运行我的看法会出现功能,应该代码停止后,我打印的东西:

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(true) 
    if isUserViewCurrentUser() == true { 
     self.navigationItem.rightBarButtonItem = nil 
     self.navigationItem.leftBarButtonItem = nil 
     return 
    } else { 
     return 
    } 

    if let userID = userDataDelegate?.userData().userID { 
     retrieveFollowerNumbers(userIdentifier: userID) 
     return 
    } 

} 

但我的控制台印有“返回true:用户不是当前用户”一千次,永不止步。我在代码中无处不在,我永远不会在for循环或任何循环中运行isUserViewCurrentUser()

这是我的用户数据:

protocol SendUserDataDelegate { 

    func userData() -> User 
} 

didSelect TableViewCell:

if let user = filteredUsers?[indexPath.row] { 
     userToPass = user 
     profileController?.userDataDelegate = self 
     self.navigationController?.pushViewController(profileController!, animated: true) 

    } 

而且这个代码在我cellRowAtIndexPath:

if isUserViewCurrentUser() == true { 
      cell.bioAndFollowStackView.addSubview(cell.followButtonOutlet) 
     } else { 
      if cell.followButtonOutlet != nil { 
       cell.followButtonOutlet.removeFromSuperview() 
      } 
     } 

发送用户对象时用户选项卡的实现代码如下细胞成另一个viewController。我每当想获得对用户对象的引用时都会打电话

+2

你可以做一个断点,并显示2-3次堆栈跟踪? –

+1

使用调试器,看看为什么会发生这种情况。 – rmaddy

+0

您可以使用断点并检查调用堆栈跟踪,将自己的调用堆栈('NSThread.allStackSymbols()')和XCode记录到日志中,检查名为isUserViewCurrentUser()的位置。 – Larme

回答

1

本人来说我看到你有两个对象具有不同的引用和你检查,如果他们是平等的......即使里面的数据是一样的实际参考不是。

如果是这样的话,你可以通过一些独特的id来检查它们。

如果user.id == Current.user.id {}

我不知道你想什么来实现的,但在我个人的意见(无犯罪)有什么臭...: )。你可以考虑更好的解决方案。

希望这会有所帮助,祝你一切顺利。

+0

它可能是一个“Equatable”符合对象。而且,无论如何,答案与问题无关。 –

+0

我只是检查当前用户是否预览他们自己的配置文件,即使我的代码不好,它应该停止,因为我把一个返回语句 –

0

viewWillAppear中,您可以拨打isUserViewCurrentUser(),它调用userDataDelegate.userData()。您没有发布userData()所做的事情,但是我敢打赌它要么会导致您的观点再次出现,要么再次致电isUserViewCurrentUser()

在任何情况下,请发表userData()代码...

+0

所以我刚刚添加userData,基本上它的一个协议功能将用户对象从一个控制器转移到另一个控制器 –

+0

@BukaCakrawala你发布的协议,请发布执行'userData()' – xaphod

+0

刚才我只是贴了代码实现从push segue到cellRowAtIndex –