我正在製作一個具有羅馬數字模式的計算器。我有在模型視圖中執行的操作和一個視圖控制器。我的問題是我需要將羅馬數字轉換爲NSNumber。有一個UILabel,並且視圖控制器獲取標籤中的內容並將其設置爲模型視圖的操作數。有誰知道我可以如何從標籤中取出羅馬數字並將其作爲NSNumber?下面是一些代碼:如何將羅馬數字轉換爲NSNumer
- (IBAction)digitPressed:(UIButton *)sender {
NSString *digit = [[sender titleLabel] text];
if (self.userIsTypingNumber) {
[self.display setText:[self.display.text stringByAppendingString:digit]];
} else {
[self.display setText:digit];
self.userIsTypingNumber = YES;
}
}
- (IBAction)operationPressed:(UIButton *)sender {
if (self.userIsTypingNumber) {
if ([self isValidForRoman:self.display.text] == YES) {
//find out what roman numeral is in the display
} else {
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc]init];
[numberFormatter setNumberStyle: NSNumberFormatterDecimalStyle];
NSNumber *n = [numberFormatter numberFromString:self.display.text];
[[Model singleton] setOperand:n];
self.userIsTypingNumber = NO;
}
}
NSString *operation = [[sender titleLabel] text];
NSNumber *result = [[Model singleton] performOperation:operation];
[self.display setText:[NSString stringWithFormat:@"%@", result]];
}
- (IBAction)clearDigitPressed:(UIButton *)sender {
[self.display setText:@""];
}
- (IBAction)clearOperationPressed:(UIButton *)sender {
[[Model singleton] performOperation:nil];
[self.display setText:@""];
}
- (IBAction)changeNumeralType:(id)sender {
switch ([sender selectedSegmentIndex]) {
case 0:
{
[self.button1 setTitle:@"1" forState:UIControlStateNormal];
[self.button2 setTitle:@"2" forState:UIControlStateNormal];
[self.button3 setTitle:@"3" forState:UIControlStateNormal];
[self.button4 setTitle:@"4" forState:UIControlStateNormal];
[self.button5 setTitle:@"5" forState:UIControlStateNormal];
[self.button6 setTitle:@"6" forState:UIControlStateNormal];
[self.button7 setTitle:@"7" forState:UIControlStateNormal];
[self.button8 setTitle:@"8" forState:UIControlStateNormal];
[self.button9 setTitle:@"9" forState:UIControlStateNormal];
[self.button0 setTitle:@"0" forState:UIControlStateNormal];
} break;
case 1:
{
[self.button1 setTitle:@"L" forState:UIControlStateNormal];
[self.button2 setTitle:@"C" forState:UIControlStateNormal];
[self.button3 setTitle:@"D" forState:UIControlStateNormal];
[self.button4 setTitle:@"I" forState:UIControlStateNormal];
[self.button5 setTitle:@"V" forState:UIControlStateNormal];
[self.button6 setTitle:@"X" forState:UIControlStateNormal];
[self.button7 setTitle:@"" forState:UIControlStateNormal];
[self.button8 setTitle:@"" forState:UIControlStateNormal];
[self.button9 setTitle:@"" forState:UIControlStateNormal];
[self.button0 setTitle:@"M" forState:UIControlStateNormal];
} break;
}
}
- (BOOL)isValidForRoman:(NSString *)text
{
NSString *romanRegex = @"^(?=.)(?i)M*(D?C{0,3}|C[DM])(L?X{0,3}|X[LC])(V?I{0,3}|I[VX])$";
NSPredicate *romanTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", romanRegex];
return ([romanTest evaluateWithObject:text]);
}
那麼,除非你正在處理浮點羅馬數字,我會首先轉換爲「int」或「long」。 NSNumber是一個紅鯡魚。 –
(並將羅馬數字轉換爲int/long是一項經典的家庭作業任務。) –
我是Objective-c的新手,所以你能幫我把它轉換成長的嗎? –