質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

18724閲覧

.swift間で変数を共有するには

ryukku3555

総合スコア13

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

1グッド

2クリップ

投稿2016/10/12 12:28

編集2016/10/13 07:06

###前提・実現したいこと
swift初心者です。

1つの.swiftに色々なデータ(変数や定数)のみまとめておき、
他の.swiftから呼び出していつでも利用できるようにすることは可能でしょうか?

以下fromageblancさんから頂いたサンプルコードを元に作成した

Ex.swift import UIKit class Ex: NSObject { // global var globalValue1:String = "global 1" var globalValue2:String = "global 2" class Ex { // static static var staticValue1:String = "static 1" static var staticValue2:String = "static 2" // class class var classValue1:String { return "class 1" } class var classValue2:String { return "class 2" } } } ViewController.swift import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. print(Ex.classValue1) // class 1 print(Ex.classValue2) // class 2 print(Ex.staticValue1) // static 1 print(Ex.staticValue2) // static 2 print(globalValue1) // global 1 print(globalValue2) // global 2 } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }

// Ex.swiftファイル内の変数にアクセス
print(Ex.classValue1) エラー type "Ex" has no member "classValue1"
print(Ex.classValue2) エラー type "Ex" has no member "classValue2"
print(Ex.staticValue1) エラー type "Ex" has no member "staticValue1"
print(Ex.staticValue2) エラー type "Ex" has no member "staticValue2"
print(globalValue1) エラー use of undeclared identifier"globalValue1"
print(globalValue2) エラー use of undeclared identifier"globalValue2"

suui👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

簡単なサンプルです。センスは悪いかもしれませんw
個人的に定数はクラス変数にして管理するのが好きです。
他の方のも知りたいですねー。

Ex.swift

swift

1// global 2var globalValue1:String = "global 1" 3var globalValue2:String = "global 2" 4 5class Ex { 6 7 // static 8 static var staticValue1:String = "static 1" 9 static var staticValue2:String = "static 2" 10 11 // class 12 class var classValue1:String { 13 return "class 1" 14 } 15 16 class var classValue2:String { 17 return "class 2" 18 } 19}

ViewController.swift(確認用)

swift

1import UIKit 2 3class ViewController: UIViewController { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view, typically from a nib. 8 9 // Ex.swiftファイル内の変数にアクセス 10 print(Ex.classValue1) // class 1 11 print(Ex.classValue2) // class 2 12 print(Ex.staticValue1) // static 1 13 print(Ex.staticValue2) // static 2 14 print(globalValue1) // global 1 15 print(globalValue2) // global 2 16 } 17}

投稿2016/10/12 14:18

fromageblanc

総合スコア2724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryukku3555

2016/10/13 02:20

わざわざコードまで記載していただいての回答ありがとうございます。 頂いたコードを実行してみたのですが、 // Ex.swiftファイル内の変数にアクセス print(Ex.classValue1)  エラー type "Ex" has no member "classValue1" print(Ex.classValue2) エラー type "Ex" has no member "classValue2" print(Ex.staticValue1) エラー type "Ex" has no member "staticValue1" print(Ex.staticValue2) エラー type "Ex" has no member "staticValue2" print(globalValue1) エラー use of undeclared identifier"globalValue1" print(globalValue2) エラー use of undeclared identifier"globalValue2" このようなエラーが発生しました。 こちらでもいじってみたのですが改善できずにおります。
fromageblanc

2016/10/13 03:31

Ex.swiftが参照できてないですね。サンプルは「Single View Application」で作成して、プロジェクトにEx.swiftを追加してます。
fuzzball

2016/10/13 04:09 編集

private class Ex { ... にすると同じエラーが出ますね。 ちなみにうちでは正しく参照できました。(Xcode7+Swift2)
ryukku3555

2016/10/13 06:58

お二人ともコメント頂いてありがとうございます。 Single View Applicationで作成しております。 Ex.swiftはsubclassをNSObjectとして追加しています。 Ex.swift import UIKit class Ex: NSObject { // global var globalValue1:String = "global 1" var globalValue2:String = "global 2" class Ex { // static static var staticValue1:String = "static 1" static var staticValue2:String = "static 2" // class class var classValue1:String { return "class 1" } class var classValue2:String { return "class 2" } } } ViewController.swift import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. print(Ex.classValue1) // class 1 print(Ex.classValue2) // class 2 print(Ex.staticValue1) // static 1 print(Ex.staticValue2) // static 2 print(globalValue1) // global 1 print(globalValue2) // global 2 } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } xcode8+swift3です。
fuzzball

2016/10/13 07:02

外側の Ex は不要です。(classの中にclassを作っちゃってます) class Ex: NSObject { と、対になる、 } を削除して下さい。
fuzzball

2016/10/13 07:07

ちなみにそのコードのままだと、 print(Ex.Ex.classValue1) print(Ex.Ex.classValue2) print(Ex.Ex.staticValue1) print(Ex.Ex.staticValue2) let ex = Ex() print(ex.globalValue1) print(ex.globalValue2) でアクセス出来ます。
ryukku3555

2016/10/13 07:11

fuzzballさんお早い回答ありがとうございます。 無事解決できました。 fromageblancさん コード、ご指摘ありがとうございます。 swiftに関して始めたばかりでclassなど理解不足で申し訳ないです。 ご質問にお付き合いいただきお二人とも本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問