我想做这样的事情:
var x = ["10","20",30"]
var y = x.map(Int.init)
但是我得到这个错误
对成员’init()’的不明确引用
我知道我可以写
var y = x.map { Int($0) }
但是我想知道是否还有另一种方式。
问题在于不存在 仅 具有参数的Int
初始化程序。 __String
目前只存在:
init?(_ text: String, radix: Int = default)
尽管该radix:
参数具有默认值,但是编译器仅在初始化程序的调用位置为您“填充”该默认值。
获取对函数本身的引用时,不会部分应用默认参数值,编译器也不会为默认参数值的所有可能组合生成额外的重载。后者不仅会给您的代码增加很大的膨胀,而且这两个选项都会破坏默认参数值,该默认参数值取决于在调用站点处插入的值(例如#file
&#line
)。
为了使其正常工作,函数值本身必须支持默认参数值,这带来了相当大的复杂性。尽管这可能是该语言的未来版本所支持的东西。
一种获得所需行为的简单解决方案是只编写一个扩展,在Int
其上添加一个init(_:)
初始化程序,然后将其转发到init(_:radix:)
:
extension Int {
/// Creates a new integer value from the given base-10 integer string, returning nil
/// if the string is in an invalid format.
init?(_ string: String) {
// we're saying (_:radix:) in order to disambiguate the call, the compiler
// will insert the default parameter value of radix: for us.
self.init(_:radix:)(string)
}
}
请注意,在Swift
4中,这可能是的扩展FixedWidthInteger
,它提供init(_:radix:)
了标准库的整数类型的实现。
现在您可以说:
let x = ["10", "20", "30"]
let y = x.map(Int.init) // [Optional(10), Optional(20), Optional(30)]
因为Int.init
现在是指我们的扩展初始化器。
这也适用于flatMap(_:)
:
let y = x.flatMap(Int.init) // [10, 20, 30]
这也会nil
从转换中过滤掉元素(不可转换为整数的字符串)。
问题内容: 与在或中使用的方式类似: 问题答案: 是。 如果你不理会关键字参数,这很简单并且可以工作: 如你所见,Python将为你提供一个包含所有参数的元组。 对于关键字参数,你需要将其作为单独的实际参数接受,如的所示。
问题内容: 很多人说评论中的要求太多,这让我犹豫不决,但是我仍然没有在他们的答案中找到解决方案,主要是因为(1)他们通常使用jQuery,而(2)问题通常包含我不理解的技术。 我有一个函数,里面有一个变量。变量被分配了一个功能。我敢肯定,这个概念不是AJAX独有的,但这是我正在使用的上下文(如果有区别的话)。 我想将变量传递给函数。但是,由于没有原始函数声明,如何指定参数?我能做到吗? 问题答案:
问题内容: 我有一个带有一些componentDidMount逻辑的React组件: 是否可以通过props传递此组件,以便componentDidMount()中的所有内容都被执行,以某种方式伪造以便截取屏幕截图?遵循以下原则: 我知道我可以使用,但是我有一些复杂的登录逻辑,我想使用这样的快捷方式来避免,而是将所有需要的道具直接传递给组件? 问题答案: 在这里回答了这个问题。让我们在这里尝试相同
在Swift编程语言中,它说: 函数也可以接受可变数目的参数,将它们收集到数组中。 当我用逗号分隔的数字列表(`sumof(1,2,3,4)调用这样一个函数时,它们在函数中作为一个数组可用。 问题:如果我已经有一个数组要传递给这个函数,该怎么办? 这将失败,并出现编译器错误,“无法找到接受所提供参数的'__conversion'的重载”。有没有办法把一个现有的数组变成一个我可以传递给一个变量函数的
我一直只使用Java6,现在正在赶上学习Java8的新内容。我在这里读了这篇文章:http://www.drdobbs.com/jvm/lambda-expressions-in-java-8/240166764?pgno=2 上面写着: Java API在Java中定义了几个通用功能接口。util。功能包。其中一个接口BiFunction描述了参数类型为T和U以及返回类型为R的函数。您可以将字符
问题内容: 使用新的JPA 2.1 存储过程调用,是否可以通过任何方法传递null参数? 这是一个示例用法: 此工程时,所有的参数,但是,当是它会失败,并从(PostgreSQL的)JDBC驱动程序错误。 我也考虑过使用自己的类来传递参数,例如: 失败的原因是: 我猜是因为它需要一种可以映射到SQL类型的类型。 有没有办法传递空参数? 问题答案: 是的,使用JPA StoredProcedureQ