2014-06-06 22 views
17

Tôi đã sau ViewController:biến Truy cập từ một ViewController trong Swift

class PageContentViewController: UIViewController { 

    var pageIndex: Int 

} 

Làm thế nào tôi có thể truy cập vào pageIndex từ một ViewController?

tôi cần phải truy cập vào pageIndex trong hàm này:

func pageViewController(pageViewController: UIPageViewController!, viewControllerBeforeViewController viewController: UIViewController!) -> UIViewController! { 

    //var index: Int 
    //index = ? 

    NSUInteger index = ((PageContentViewController*) viewController).pageIndex; // in Swift? 

    if ((index == 0) || (index == NSNotFound)) { 
     return nil; 
    } 

    index--; 

    return [self viewControllerAtIndex:index]; // in Swift? 
} 
+2

câu trả lời của câu hỏi này giống với câu hỏi "Truy cập biến khác từ lớp khác". bạn cần phải tham khảo đối tượng trước. (và tôi nghĩ rằng đó là một câu hỏi xấu) –

+0

'var chỉ số: Int = PageContentViewController (viewController) .pageIndex' đó là cách bạn có thể dịch dòng đó vào Swift Tôi tin rằng – connor

+0

@BryanChen: Bạn nghĩ hay bạn biết? Một liên kết sẽ là tuyệt vời cho một câu trả lời hiện có. Tôi sẽ rất vui khi đóng nó khi bạn đã cung cấp điều đó. – fuzz

Trả lời

20

Tất cả mọi thứ theo mặc định trong nhanh chóng là công khai, và do đó nếu bạn khai báo một cái gì đó như thế này:

class SomeViewController: UIViewController { 
    var someVariable: SomeType = someValue 

    init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) { 
     super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) 
    } 
} 

Bạn có thể truy cập vào nó càng lâu như bạn có một ví dụ về nó:

var myCustomViewController: SomeViewController = SomeViewController(nibName: nil, bundle: nil) 
var getThatValue = myCustomViewController.someVariable 
+0

điều này chỉ hoạt động nếu các lớp nằm trong cùng một tệp? – connor

+2

đây không phải là lý do hợp lệ để sử dụng biến toàn cục. và điều gì sẽ xảy ra nếu bạn có nhiều phiên bản 'PageContentViewController'? –

+2

@BryanChen: Bằng mọi cách, hãy cho chúng tôi biết cách truy cập đúng vào biến đó. – fuzz

3

Đây là nỗ lực của tôi để hội tụ t rằng mã để nhanh chóng:

func pageViewController(pageViewController: UIPageViewController!, viewControllerBeforeViewController viewController: UIViewController!) -> UIViewController! { 

    var pageController = viewController as PageContentViewController 
    var index: Int? = pageController.pageIndex 

    if var idx: Int = index{ 
     if idx == 0{ 
      return nil 
     } 
     else{ 
      idx-- 
      return viewControllerAtIndex(idx) 
     } 
    } 
    else{ 
     return nil 
    } 
} 
class PageContentViewController: UIViewController { 

    var pageIndex: Int? 

} 
4

ViewController1.swift

class ViewController1: UIViewController { 

    struct GlobalVariable{ 
     static var myString = String() 
    } 
} 

ViewController2.swift

class ViewController2: UIViewController 
{ 

print(ViewController1.GlobalVariable.myString) 

} 
+0

Làm phiền rằng bạn phải gọi GlobalVariable.myString ngay cả trong ViewController1 và không thể chỉ tham chiếu đến myString ở đó. Nhưng điều này hoạt động tốt để tham chiếu nó trong bộ điều khiển xem khác. Cảm ơn! – RanLearns

1

tôi giải quyết theo cách này. .

class StaticLinker 
{ 
    static var viewController : PageContentViewController? = nil 
} 

class PageContentViewController: UIViewController 
{ 

    var pageIndex: Int 
    StaticLinker.viewController = self 
} 

class AnotherClass 
{ 
    StaticLinker.viewController.pageIndex = 100 
} 
+0

Hãy xem [cách trả lời] này (http://stackoverflow.com/help/how-to-answer). – thewaywewere

+0

cảm ơn, tôi sẽ cải thiện câu trả lời của tôi lần sau.:) – Roy

+0

@thewaywewere Có gì sai với cách anh ta trả lời? – fuzz

Các vấn đề liên quan