【问题标题】:ViewController Does Not have member named "allValues"ViewController 没有名为“allValues”的成员
【发布时间】:2015-06-16 18:58:10
【问题描述】:

这是一个常见问题,但我找不到解决我的具体问题的答案。我正在创建一个程序,该程序接受用户输入的信用卡并返回信用卡类型。除了我不断收到错误“ViewController 没有成员名称‘allValues’。有人知道如何解决这个问题吗?

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var typeLabel: UILabel!
    @IBOutlet weak var creditCardTextField: UITextField!

    @IBAction func CardTypePressed(sender: AnyObject) {

    enum CardType: String {
        case None = "None"
        case Visa = "Visa"
        case AmericanExpress = "American Express"
        case Mastercard = "Mastercard"
        case Discover = "Discover"

        private func regularExpression() -> NSRegularExpression {
            switch self {
            case .Visa:
                return NSRegularExpression(pattern: "^4[0-9]{12}(?:[0-9]{3})?$", options: nil, error: nil)!
            case .AmericanExpress:
                return NSRegularExpression(pattern: "^3[47][0-9]{13}$", options: nil, error: nil)!
            case .Mastercard:
                return NSRegularExpression(pattern: "^5[1-5][0-9]{14}$", options: nil, error: nil)!
            case .Discover:
                return NSRegularExpression(pattern: "^6(?:011|5[0-9]{2})[0-9]{12}$", options: nil, error: nil)!
            default:
                return NSRegularExpression(pattern: ".*", options: nil, error: nil)!
            }
        }
        func isValidFor(cardNumber: String) -> Bool {
            let re = self.regularExpression()
            let range = NSRange(0..<cardNumber.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))
            let matches = re.numberOfMatchesInString(cardNumber, options: nil, range: range)
            return matches > 0
        }

        static let allValues = [Visa, AmericanExpress, Mastercard, Discover]
    }

     func from(cardNumber: String) -> CardType {
        for type in CardType.allValues {
            if type.isValidFor(cardNumber) {
                return type
            }
        }
        return CardType.None
    }
    var creditCardType = CardType.from(creditCardTextField).toRaw()
    typeLabel.text = "Credit Card Type: \(creditCardType)"

    }
}

【问题讨论】:

    标签: ios xcode swift uiviewcontroller


    【解决方案1】:

    self 中没有属性allValues

    您可能是指CardType.allValues。像这样的:

    func from(cardNumber: String) -> CardType {
        for type in CardType.allValues {
            if type.isValidFor(cardNumber) {
                return type
            }
        }
        return CardType.None
    }
    

    【讨论】:

    • 非常感谢!这解决了这个问题,但我又遇到了一个问题。尝试检索类型时。我遇到了类似的问题。它说“CardType.Type 没有'来自'的成员”你知道这里可能是什么问题吗?我将代码添加到问题中。
    • @NickEmmons 您应该首先尝试理解您的代码...from 函数不是CardType 枚举的一部分。再次检查您的代码,看看是否可以找到错误。
    • 好吧,所以我已经尝试了所有我认为可以修复它的方法,但无济于事......你能至少指出这个错误所在的正确方向吗?
    猜你喜欢
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 2014-11-09
    • 2015-06-09
    • 1970-01-01
    相关资源
    最近更新 更多