J'ai le ViewController
suivant:
class PageContentViewController: UIViewController {
var pageIndex: Int
}
Comment accéder à pageIndex
à partir d'un autre ViewController?
J'ai besoin d'accéder à pageIndex
dans cette fonction:
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?
}
Tout par défaut dans Swift est public, et donc si vous déclarez quelque chose comme ceci:
class SomeViewController: UIViewController {
var someVariable: SomeType = someValue
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
}
Vous pouvez y accéder tant que vous en avez une instance:
var myCustomViewController: SomeViewController = SomeViewController(nibName: nil, bundle: nil)
var getThatValue = myCustomViewController.someVariable
ViewController1.Swift
class ViewController1: UIViewController {
struct GlobalVariable{
static var myString = String()
}
}
ViewController2.Swift
class ViewController2: UIViewController
{
print(ViewController1.GlobalVariable.myString)
}
J'ai résolu de cette façon. .
class StaticLinker
{
static var viewController : PageContentViewController? = nil
}
class PageContentViewController: UIViewController
{
var pageIndex: Int
StaticLinker.viewController = self
}
class AnotherClass
{
StaticLinker.viewController.pageIndex = 100
}
Voici ma tentative de convertir ce code en 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?
}
class color: UIViewController {
var blue:Int = 90
}
y accéder depuis une autre classe (assurez-vous d'appeler la variable dans une fonction sinon vous allez avoir une erreur)
class ViewController: UIViewController{
var example:color = color()
override func viewDidLoad() {
super.viewDidLoad()
// call it here
print(example.blue)
}
}
class firstViewController: UIViewController{
var variableName: variableType = variableValue
}
Vous pouvez accéder à cette variable dans le secondViewController en créant une instance de firstViewController ()
class secondViewController: UIViewController{
var newVariableName = firstViewController()
}
plus tard, utilisez le newVariableName pour accéder à la valeur du variableName
newVariableName.variableName
J'étais confronté au même problème quand je dois utiliser des jetons dans toutes les autres classes, la solution est assez simple, ce que j'ai fait était
var access = LoginViewController()
token = access.token
mais le problème rencontré était: Utilisation de la valeur par défaut pour le jeton. J'ai donc rendu cette variable statique et l'ai utilisée en vue.
var token : String = ""
var access = LoginViewController.self
token = access.token