以大写或小写形式返回文本

时间:2019-09-01 16:42:14

标签: ios swift

我对Swift还是很陌生,所以事情是我有一个Enum,我必须返回带有大写或小写字母的文本,并且我的代码不起作用。

# regex approach
import re
from collections import deque

x = deque(['a', '# this #', 'c'])
substring= "this"

if re.search(substring, "".join(x)):
    print(True)

和我得到的错误:

操场执行失败:

错误:demo.playground:60:5:错误:预期的声明     setCase(text:“ example”,case:。大写)     ^

demo.playground:47:6:注意:在“ UpLow”声明中 枚举UpLow {      ^

编辑:我只能通过调用setCase(text:“ Chosen text”,case:.ChosenCase)函数来使此功能正常工作

练习5a: 创建一个函数,枚举允许您定义此方法: setCase(文本:“星际”,大小写:。大写)// INTERSTELLAR setCase(文本:“星际”,案例:。小写)//星际 * /

2 个答案:

答案 0 :(得分:2)

将函数放入枚举是没有意义的,根据练习5a,这不是必需的。

enum UpLow {
    case uppercase
    case lowercase
}

func setCase (text: String, `case`: UpLow) -> String {
    switch `case` {
    case .uppercase: return text.uppercased()
    case .lowercase: return text.lowercased()
    }
}

let uppercaseString = setCase(text: "Interstellar", case: .uppercase)
let lowercaseString = setCase(text: "Interstellar", case: .lowercase)

答案 1 :(得分:2)

您的setCase(text: String) -> StringUpLow枚举的实例方法。这意味着要调用它,您需要在接收器上调用它,该接收器是类型UpLow的变量。例如,UpLow.Uppercase.setCase(text: "Chosen Text")

此外,您要调用的函数是全局函数setCase(text:case:),该函数不存在。

与全局函数不同,实例方法具有与之关联的“实例”。这是self变量,其作用类似于隐式参数,该隐式参数已在方法的主体内提供给您。

另一个问题是您对setCase(text: "example", case: .Uppercase)的调用是在UpLow的声明中完成的。这是无效的。声明就像抽象的定义集。它不是像操场的其余部分那样自上而下地运行。

您有几种解决方法。

  1. 您可以保留setCase作为实例方法,在这种情况下,您将使用以下方法:

    enum UpLow {
        case uppercase
        case lowercase
    
        func setCase(text: String) -> String {
            switch self {
            case .uppercase: return text.uppercased()
            case .lowercase: return text.lowercased()
            }
        }
    }
    
    UpLow.uppercase.setCase(text: "example")
    
  2. 您可以改为创建全局函数(这是IMO的最差选择):

    enum UpLow {
        case uppercase
        case lowercase
    }
    
    func setCase(text: String, case upLow: UpLow) -> String {
        switch upLow { // Note: there is no "self" in a global function
        case .uppercase: return text.uppercased()
        case .lowercase: return text.lowercased()
        }
    }
    
    setCase(text: "Chosen text", case: .ChosenCase)
    
  3. 或者,我最喜欢在String本身上使您的函数成为实例方法:

    enum UpLow {
        case uppercase
        case lowercase
    }
    
    extension String
        func setCase(_ upLow: UpLow) -> String {
            // "self" is the String, "upLow" is the UpLow
            switch upLow { 
            case .uppercase: return self.uppercased()
            case .lowercase: return self.lowercased()
            }
        }
    }
    
    "example".setCase(.uppercase)