2011-12-31 6 views
0

したがって、実行しようとしているwhile関数のパラメータとなるもののNSStringをコンパイルします...詳しく説明しようとします。私(y > 102 || y < 60) && (y > 134 || y < 92) && (y > 116 || y < 74)または類似のものの出力文字列を与えることObjective-C NSStringのwhileステートメントを実行

NSMutableString *str = [[NSMutableString alloc] init]; 
for (int i = 0; i < [self.badCoords count]; i++) { 
    CGFloat off = [[self.badCoords objectAtIndex:i] floatValue]; 
    [str appendFormat:@"(y > %.0f || y < %.0f) && ", off+21, off-21]; 
} 
str = [str substringToIndex:[str length]-4]; 

:私は、コードを使用しています。私は、これに似たwhile文の中にその文字列を配置する必要があり

:あなたが効果的に求めている何

while((y > 102 || y < 60) && (y > 134 || y < 92) && (y > 116 || y < 74)) { 
    y = [self somethingNew]; 
} 
+0

もう少し文脈を与えることができますか?なぜあなたはこれをしたいのですか? –

+0

さて、私は、アプリケーションがランダムなY起源のUI要素を作成し、重複しないようにする必要があります。 –

答えて

3

は、「どのように私はそれを動的に実行し、それをコンパイルし、コードを生成しますか?」であります

答えは次のとおりです。 "あなたはそうしない"。少なくとも、あなたは非常に特殊な状況の外ではなく、あなたがそうしていれば、そうしないで、どんな種類の合理的なパフォーマンスを期待しています。

この場合、テストする必要がある値の数値表現があるようです。最高の数字としてそれらを残すために!文字列への印刷を行い、それを構文解析/コンパイルしようとすると、鈍いパターンになります(2000年以前のTCLを参照)。

I.e.さまざまな制限を計算してから、while()ステートメントを直接使用します。

while((y > upperLimit) || (y < lowerLimit) ... etc ...) {...} 
1

このような何かはあなたが求めているものを行う必要があります:あなたはもともとそれについて移動するために求めていた方法は、私はそれをやった方法ではありませんことを

float y = initialYValue; 
BOOL yInBadRanges = NO; 
while (!yInBadRanges) { 
    for (NSNumber *coordinate in self.badCoords) { 
     CGFloat upperLimit = [coordinate floatValue]+21.0f; 
     CGFloat lowerLimit = [coordinate floatValue]-21.0f; 
     if (y <= upperLimit && y >= lowerLimit) { 
      yInBadRanges = YES 
      break; 
     } 
    } 
    if (!yInBadRanges) y = [self somethingNew]; 
} 

注意。このようにしてwhileループで条件式として文字列を使用することはできないため、条件式を書式設定された文字列に変換するのは意味がありません。

あなたのコメントはあなたの意図を少しはっきりさせていますが、詳細な説明がなくても具体的な行動を示唆するのは難しいです。私のアドバイスは、あなたが最初にそれを行う特定の方法に設定されていないと達成しようとしていることをどうやってやるかについて懸命に考えることです。コントロールをレイアウトするためのより良いアルゴリズムかもしれ

は(標準免責条項が適用されます。私は答えエディタにこれを入力した、それを実行せずに...)...あります

+0

@bbumはもちろん正しいです。私が投稿したコードは、彼が提案しているものと同じ種類のものです。 –

0

あなたは、で定義されているいくつかの論理テストを(行うことができますランタイム)をNSPredicateクラス機能を使用して実行します。 それを見て、あなたが必要とするかもしれません。

関連する問題