2014-09-29 76 views
1

我在ObjC 这个代码,我想还是试图将其转换为SWIFTSwift - 枚举button.tag?

typedef NS_ENUM(NSInteger, BB3Photo) { 
kirkenType = 10 , 
festenType = 20 , 
praestType = 30 
}; 

@property (nonatomic, assign) BB3Photo selectedPhotoType; 


- (IBAction)changeImage:(id)sender { 
if ([sender isKindOfClass:[UIButton class]]) { 
    UIButton *button = sender; 
    _selectedPhotoType = button.tag; 
} 
UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"Vælg Billed" 
                delegate:self 
              cancelButtonTitle:nil 
            destructiveButtonTitle:nil 
              otherButtonTitles:@"Vælg fra Biblioteket", @"Vælg Kamera", nil]; 
sheet.actionSheetStyle = UIActionSheetStyleDefault; 
[sheet showInView:[self.view window]]; 

}

这里是我已经用它制成的

enum BBPhoto1: Int { 
    case kommunen = 10 
    case sagsbehandler = 20 
    case festen = 30 
} 

var selectedPhoto = BBPhoto1.self 

@IBAction func changeImage(sender: AnyObject){ 
    if sender .isKindOfClass(UIButton){ 
     let button: UIButton = sender as UIButton 
     selectedPHoto = (sender as UIButton).tag as BBPhoto1 // doesent work "cannot assign that result as expression" 
     selectedPHoto = button.tag // doesnt work either "cannot assign that result as expression" 
     self.selectedPhoto = BBPhoto1.fromRaw((sender as UIButton).tag) // nope "cannot convert the expressions type() to type UIButton" 

    } 
} 

我希望能够有一个开关语句与按钮标签相同的功能,但在代码不同

+0

为什么'@IBAction func changeImage(sender:UIButton){...'directly?你是否期待其他类型的_senders_? – holex 2018-02-13 09:05:09

回答

1

您想使用tag作为BBPhoto1枚举的原始值。您可以有条件去包裹做到这一点:

@IBAction func changeImage(sender: AnyObject){ 
    if let button = sender as UIButton { 
     if let photoType = BBPhoto1.fromRaw(button.tag) { 
      self.selectedPhoto = photoType 
     } 
    } 
} 

还有你selectedPhoto财产申报的问题。它应该是:

var selectedPhoto: BBPhoto1? 

你有它的方式,现在它不持有BBPhoto1值,而是在类型的BBPhoto1本身


注意,fromRaw语法已变为初始值设定在Xcode 6.1:

@IBAction func changeImage(sender: AnyObject){ 
    if let button = sender as UIButton { 
     if let photoType = BBPhoto1(rawValue: button.tag) { 
      self.selectedPhoto = photoType 
     } 
    } 
} 
+0

BBPhoto1不可转换为BBPhoto1.Type – KennyVB 2014-09-29 17:06:49

+0

啊看到编辑,现在它的工作! – KennyVB 2014-09-29 17:09:11

1

如何处理:

@IBAction func changeImage(sender: AnyObject){ 
    if sender .isKindOfClass(UIButton){ 
     let button: UIButton = sender as UIButton 
     selectedPHoto = BBPhoto1.fromRaw(button.tag) 
    } 
} 

或(短):

@IBAction func changeImage(sender: UIButton){ 
    selectedPHoto = BBPhoto1.fromRaw(sender.tag) 
} 
+0

does not work其中任何一个,它说不能将表达式类型()转换为类型 – KennyVB 2014-09-29 17:08:34

0

fromRaw()方法返回一个可选的,所以你有你的财产申报作为可选:

var selectedPHoto: BBPhoto1? 

,并使用此代码:

self.selectedPhoto = BBPhoto1.fromRaw((sender as UIButton).tag) 

或者,y然而

self.selectedPHoto = BBPhoto1.fromRaw((sender as UIButton).tag)! 

注意,在这种情况下,如果原始值没有映射到一个枚举,运行时将引发异常:您可以同时解开了fromRaw返回值。

0

好,不一样的代码;如验证文本字段,但在Swift 4,iOS 11,xCode 9.2中的原理相同。

enum SFT: Int { 
    case StudentNameFieldTag 
    case StudentIDFieldTag 
    case StudentClassFieldTag 
    case ChallengeCodeFieldTag 
} 

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 
    if textField.tag == SFT.StudentClassFieldTag.rawValue { 
     let whitespaceSet = CharacterSet.whitespaces 
     if let _ = string.rangeOfCharacter(from: whitespaceSet) { 
      return false 
     } else { 
      return true 
     } 
    } 
    return true 
}