2017-07-09 9 views
2

によって出口変数を取得します。迅速でプログラムコンセントにアクセスする方法をお探しの名前

@IBOutlet var label1: UILabel? 
var outletName = "label1" 
view[outletName].text = "hello, world!" 

はそうのように、自分自身のカスタムマッピングを作成するには、これを行うための唯一の方法ですか?

@IBOutlet var label1: UILabel? 
let outlets = ["label1": label1] 
let outletName = "label1" 
outlets[outletName].text = "hello, world!" 

EDIT:は、私の元の質問が悪い言葉で表現されたようだもう一度試すことができます:私はいくつかの文字列識別子を通じて変数にアクセスしているよ
。私の元の質問では、変数自体に変数の名前で何らかの形でアクセスできるかどうかを尋ねようとしていました。 IEは変数label1に変数名 "label1"の文字列でアクセスします。

+0

あなたの質問はあなたの本当の問題について漠然としています。あなたは 'IBOutlet'のコレクションを持っている必要がありますか?あるいは実際に 'IBOutlet'を使うのに問題がありますか?アウトレットは**プログラム的なので私はこれを言う。 –

+0

さて、私は質問を少し言い直し、私が達成しようとしている目標をより良く説明するためにそれを編集しました。変数(この場合はIBOutlet)にプログラムでアクセスするために使用できる識別子を探しています。 – Rawr

答えて

2

にアクセスしたいときはいつでも、次にyoutは口に0

label1.tag = 1 

以外の固有のタグ番号を与える、あなたのviewDidLoadには、実際には一種のは難しいです純粋なスウィフトで

いくつかのobjective-c APIを使用して、あなたを助けることができます。

// Mark your outlet variable as dynamic 
@IBOutlet dynamic var label1: UILabel? 


var outletName = "label1" 
// Then you can access it via a key path (aka string) 
if let myProperty = value(forKey: string) as? UILabel { 
    myProperty.text = "Hello, world!" 
} 
+0

ありがとう、これは私が達成する。 – Rawr

0

目的を達成するための簡単な方法があります。まず、あなたはプロパティへのアクセスに文字列を入れることに

if let theLabel = self.view.viewWithTag(1) as? UILabel { 
    theLabel.text = "hello, world!" 
} 
+1

タグは、ビュー階層内の要素を識別する非常に壊れやすい方法です。彼らは避けるべきです。 –

+0

これは私が探していた解決策の種類です。それほど脆弱ではない選択肢がありますか? IBOutletにアクセスするための何らかの識別子を探しています。私の元々の質問では、変数自体の名前で変数にアクセスしたいと考えていましたが、この回答のようなタグは実行可能な選択肢でした。 – Rawr

+0

@Rawrこれはあなたの必要条件に合う唯一の方法だと思います。はいタグを使うのは良くありませんが、あなたが何をしているのか知っていて、あなたのビューコントローラーに**タグシステムが1つしかないなら、それを使用しても害はありません:) –

関連する問題