2017-10-17 82 views
0
- (void) tapGesture: (id)sender 
{ 
    UITapGestureRecognizer *gesture = (UITapGestureRecognizer *) sender; 
    NSInteger userID = gesture.view.tag; 

    UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main" 
                 bundle:nil]; 
    OthersProfile *vc = (OthersProfile*)[storyboard instantiateViewControllerWithIdentifier:@"othersprofile"]; 
    NSString *strUserID = [NSString stringWithFormat:@"%ld", (long)userID]; 

    vc.userID = strUserID; 
    [self.viewController.navigationController pushViewController:vc 
                 animated:YES]; 
} 

訪問迅速財產它使用Xcode中8 /斯威夫特3工作,但好像有在Xcode 9個問題,並迅速4.從objC

我有沒有發現錯誤屬性的用戶ID。

在斯威夫特文件:

var userID : String = "" 
override func viewDidLoad() { 
    print(userID) //no value here 
} 

有任何想法,任何人?

+0

您確定此代碼在XCode8中工作? –

+0

@PuneetSharma對不起,我更新了我的問題 –

+0

Swift 4不再向Objective-C運行時公開所有內容,因此您可能必須使用'@ objc'來註釋屬性 – ctietze

回答

2

試試這個:

@objc var userID : String = " 

爲SWIFT代碼暴露於目標C的規則已在夫特4.這樣改變,代碼在夫特3是好的,因此你所面對的混淆;)

新設計完全詳細於the corresponding Swift Evolution proposal

+0

@ UkukuDalmaz ......不幸的是,從Swift 3遷移到4時,這是一個非常常見的問題:-( –

0

Addression您的其他問題,你應該可以解決您如何訪問控制:

這是因爲vc.user是當你試圖將其設置爲零,一個變量添加到迅速控制,並設置它,而不是vc.user的`。文字

vc.yourVariable = strUserID; 
[self.viewController.navigationController pushViewController:vc 
                animated:YES]; 

然後在viewDidAppear您將能夠與此變量設置

@IBOutlet var user: UILabel! 
public var yourVariable: String = "" 

override func viewDidLoad() { 
    user.text = yourVariable 
    print(user.text!) //should be value 

} 
+0

我試過這個,但是這次我有Property'userID'找不到'OthersProfile *'類型的對象?錯誤。檢查我的其他問題https://stackoverflow.com/questions/46754687/cannot-access-a-variable-of-other-view/46755098?noredirect=1#comment80464520_46755098 –

+0

你導入你的文件看到這個變量? –

+0

我不明白你的問題? –