我現在面臨的問題與轉換的NSString成目標C.轉換成NSString的可執行語句
例如可執行語句,
NSString *strColorAssembly = @"[UIColor redColor]";
現在,我需要把這個字符串轉換成可執行代碼和傳遞給.color屬性。 這只是一個例子,我試圖建立一個項目,其中一切都是動態的,所以如果任何人都可以爲我提供正確的方向,那將是非常有幫助的。
我現在面臨的問題與轉換的NSString成目標C.轉換成NSString的可執行語句
例如可執行語句,
NSString *strColorAssembly = @"[UIColor redColor]";
現在,我需要把這個字符串轉換成可執行代碼和傳遞給.color屬性。 這只是一個例子,我試圖建立一個項目,其中一切都是動態的,所以如果任何人都可以爲我提供正確的方向,那將是非常有幫助的。
你不能在iOS上這樣做,期間。 iOS阻止您分配既可以寫入也可以執行的內存頁面。
您可以管理的最好方法是解釋字符串,解析它們,並嘗試將它們映射到Objective-C調用(使用NSClassFromString
和NSSelectorFromString
)。
我會建議不要做你想做的事情,而應該使用可可到動態語言的許多綁定之一。我認爲最流行的將可可綁定到Lua,所以你可以編寫你的Lua代碼,一切都將是動態的。
我不確定您是否可以通過編程實現該目標。如果是我,我會實現一個接受NSString(或NSInteger)並返回UIColor的方法。
- (UIColor *)colorDecode:(NSString *)colorPassed
{
if ([colorPassed isEqualToString @"red"])
{
return [UIColor redColor];
}
else if
.
.
.
}
OR
- (UIColor *)colorDecodewithInt:(NSUInteger)colorIndex
{
switch (colorIndex)
{
case (0)
{
return [UIColor redColor];
break;
}
case (1)
.
.
.
.
default
{
return <some default color>;
break;
}
}
}
編輯: 我想你也可以使用一個NSDictionary是由的UIColor的集合對象以及。底線是,除非您開始使用CGColor播放,您可以開始動態傳遞RGB值,否則您將被限制爲編譯代碼中預定義的一組顏色。
這聽起來像你正在尋找的是setValue:ForKey:
方法。任何符合NSKeyValueCoding協議的選項都可以使用該選項。但是,這隻適用於key
部分(即財產的名稱)。 iOS明確禁止對分佈式代碼進行任何修改。我建議使用key
作爲字符串,併爲您的其他數據編寫某種解釋器。
聽起來更像是他正在Objective-C中爲Objective-C編寫解析器和VM。 – Idles