次の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?
}
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
ViewController1.Swift
class ViewController1: UIViewController {
struct GlobalVariable{
static var myString = String()
}
}
ViewController2.Swift
class ViewController2: UIViewController
{
print(ViewController1.GlobalVariable.myString)
}
私はこの方法で解決しました。 。
class StaticLinker
{
static var viewController : PageContentViewController? = nil
}
class PageContentViewController: UIViewController
{
var pageIndex: Int
StaticLinker.viewController = self
}
class AnotherClass
{
StaticLinker.viewController.pageIndex = 100
}
そのコードを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
}
他のクラスからアクセスします(関数内で変数を呼び出してください。そうしないと、エラーが発生します)
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
}
FirstViewController()のインスタンスを作成することにより、secondViewControllerでこの変数にアクセスできます。
class secondViewController: UIViewController{
var newVariableName = firstViewController()
}
後でnewVariableNameを使用してvariableNameの値にアクセスします
newVariableName.variableName
私は他のすべてのクラスでトークンを使用しなければならないときに同じ問題に直面していました、解決策は非常に簡単です、私がやったことは
var access = LoginViewController()
token = access.token
しかし、遭遇した問題は次のとおりでした:トークンのデフォルト値を使用します。だから私はその変数を静的にし、ビューでこれを使用してロードしました。
var token : String = ""
var access = LoginViewController.self
token = access.token