2016-08-16 3 views
1

신속한 프로젝트에서 함수 밖에서 전역 변수를 선언하는 방법에 대해 혼란스러워합니다. 이 내가 변수 "chosenFeed"같은 jQuery과의 선택된 행의 텍스트를 저장하기 위해 사용하고 코드입니다 : 다음 1UITableView를 사용하는 동안 신속하게 전역 변수 선언하기

, 내가 다른보기 컨트롤러에 URL을 열려면이 변수를 사용하려고 해요 like : 2

"chosenFeed"가 해당 재정의 기능에 국한되어 있기 때문에 잘못 입력했음을 알았습니다. 그래서이 글로벌 변수가 다른 VC에 의해 액세스되도록 선언하는 방법을 알지 못합니다. 어떤 사람들은 구조체를 권장합니다, 그래서있는 tableView VC이 시도 :

struct GlobalVariable { 
    static var indexPath = tableView.indexPathForSelectedRow 
    static var currentCell = tableView.cellForRowAtIndexPath(indexPath!)! as UITableViewCell 
    static var choosenFeed = tableDict[currentCell.textLabel!.text!] 
} 

하지만 너무 많은 모호한 참조 BC 하나를 작동하지 않았다. 어떤 해결책?

+0

전역을 사용하지 마십시오. 두 번째보기 컨트롤러에서 속성을 선언하고 발표하기 전에 해당 속성을 설정하십시오. 스토리 보드를 사용하고 있습니까? 그렇다면'prepareForSegueWithIdentifier : – Paulw11

+0

'에서 이렇게 할 수 있습니다. @ Paulw11처럼 전역 변수를 사용하지 마십시오. 프로젝트가 너무 커지면 너무 많은 변수 이름과 혼동되어 개발하기에 좋지 않습니다. 변수가이 두 개의 다른보기 컨트롤러 사이에서만 사용됩니까? – jo3birdtalk

답변

1

다른 포스터는 전역 변수를 사용하는 것에 대한 언급이 최선의 방법이 아닙니다. 좋은 코딩 방법은 아니며, 일단 앱이 확장되면 매우 혼란 스러울 수 있습니다. TableView와 다른 뷰 (ViewController, Cell 등) 사이에 정보를 전달할 때 두 가지 옵션이 있습니다 (전역 변수 사용 제외).

첫 번째 옵션 : 사용 prepareForSegue 당신이 chosenFeed라는 변수를 만들 필요가의 ViewController 목적지에

. 그런 다음의 TableView의 하단에 당신은 데이터 전달이 prepareForSegue 기능을 사용할 수 있습니다

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if let destinationVC = segue.destinationViewController as ViewController { 
     destinationVC.chosenFeed = self.chosenFeed 
    } 
} 

을 OR이 데이터가 전송 될 필요가 당신을 선택하는 셀을 기반으로하는 경우 당신은 didSelectRowAtIndexPath

를 사용할 수 있습니다 didSelectRowAtIndexPath를 사용할 수 있습니다. 당신은 여전히 ​​대상 ViewController에 selectedFeed라는 변수를 추가해야합니다. 이 옵션을 선택하면 스토리 보드에서 단편의 이름을 지정해야합니다.

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    // Youll need the name of your ViewController here to pass the variable 
    let destinationVC = "nameOfTheDestination_VC()" 
    destinationVC.chosenFeed = self.chosenFeed 

    //This is where you use the named segue from the Storyboard 
    destinationVC.performSegueWithIdentifier("segueName", sender: self) 

}

그 제안 중 하나를 당신을 위해 무엇을 찾고있는 사람이어야한다. 모든 후, 당신은 여전히 ​​당신은 단지 클래스 선언 위의 변수를 선언 할 필요가 (이 질문은 질문했다 후) 당신이 전역 변수를 필요로 결정하는 경우 : 예제 사진에서,

var chosenFeed : String? 
class About_VC: UIViewController { 
    //code here 
} 

마지막 메모를하면 힘 풀기에 조심하여 게시하십시오. 건배!

관련 문제