web-dev-qa-db-ja.com

Swiftで別のViewControllerから変数にアクセスする

次のViewControllerがあります。

class PageContentViewController: UIViewController {

    var pageIndex: Int

}

別のViewControllerからpageIndexにアクセスするにはどうすればよいですか?

この関数でpageIndexにアクセスする必要があります。

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?
}
24
fuzz

Swiftのデフォルトではすべてがパブリックであるため、次のように宣言した場合:

class SomeViewController: UIViewController {
    var someVariable: SomeType = someValue

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

インスタンスがある限り、アクセスできます。

var myCustomViewController: SomeViewController = SomeViewController(nibName: nil, bundle: nil)
var getThatValue = myCustomViewController.someVariable
21
Mike

ViewController1.Swift

class ViewController1: UIViewController {

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

ViewController2.Swift

class ViewController2: UIViewController 
{

print(ViewController1.GlobalVariable.myString)

}
9
Sabarinathan

私はこの方法で解決しました。 。

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

class PageContentViewController: UIViewController
{

    var pageIndex: Int
    StaticLinker.viewController = self
}

class AnotherClass
{
    StaticLinker.viewController.pageIndex = 100
}
5
roy

そのコードをSwiftに変換する私の試みは次のとおりです。

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?

}
2
Connor
class color: UIViewController {

    var blue:Int = 90
}

他のクラスからアクセスします(関数内で変数を呼び出してください。そうしないと、エラーが発生します)

class ViewController: UIViewController{
   var example:color = color()


  override func viewDidLoad() {
     super.viewDidLoad()
     // call it here
      print(example.blue)
  }
}
1
user9426229
class firstViewController: UIViewController{
var variableName: variableType = variableValue
}

FirstViewController()のインスタンスを作成することにより、secondViewControllerでこの変数にアクセスできます。

class secondViewController: UIViewController{
var newVariableName = firstViewController()
}

後でnewVariableNameを使用してvariableNameの値にアクセスします

newVariableName.variableName
1
Rawand Saeed

私は他のすべてのクラスでトークンを使用しなければならないときに同じ問題に直面していました、解決策は非常に簡単です、私がやったことは

var access = LoginViewController() 
token = access.token

しかし、遭遇した問題は次のとおりでした:トークンのデフォルト値を使用します。だから私はその変数を静的にし、ビューでこれを使用してロードしました。

     var token : String = ""
     var access = LoginViewController.self
     token = access.token
1
Lakshay