我对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(文本:“星际”,案例:。小写)//星际 * /
答案 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) -> String
是UpLow
枚举的实例方法。这意味着要调用它,您需要在接收器上调用它,该接收器是类型UpLow
的变量。例如,UpLow.Uppercase.setCase(text: "Chosen Text")
此外,您要调用的函数是全局函数setCase(text:case:)
,该函数不存在。
与全局函数不同,实例方法具有与之关联的“实例”。这是self
变量,其作用类似于隐式参数,该隐式参数已在方法的主体内提供给您。
另一个问题是您对setCase(text: "example", case: .Uppercase)
的调用是在UpLow
的声明中完成的。这是无效的。声明就像抽象的定义集。它不是像操场的其余部分那样自上而下地运行。
您有几种解决方法。
您可以保留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")
您可以改为创建全局函数(这是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)
或者,我最喜欢在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)