Swift 无法调用'';具有类型为'';
在操场(Xcode 7.2(7C68))中,我使用了一个泛型函数并得到了错误:Swift 无法调用'';具有类型为'';,swift,swift2,Swift,Swift2,在操场(Xcode 7.2(7C68))中,我使用了一个泛型函数并得到了错误: Cannont invoke 'requires' with an argument list of type 'MyClass' 游乐场守则: import Foundation public protocol Proto { func someFunction() } func requires<T: Proto>(param: T) -> Bool { if param
Cannont invoke 'requires' with an argument list of type 'MyClass'
游乐场守则:
import Foundation
public protocol Proto {
func someFunction()
}
func requires<T: Proto>(param: T) -> Bool
{
if param is NSObject
{
return true
}
else
{
return false
}
}
class MyClass:NSObject, Proto {
var name: String
required init?(response: String){
self.name = response
}
func someFunction(){
print(name)
}
}
var m = MyClass(response: "Hey there")
requires(m) // Cannont invoke 'requires' with an argument list of type 'MyClass'
<代码>导入基础
公共协议协议协议{
func someFunction()
}
func requires(参数:T)->Bool
{
如果param是NSObject
{
返回真值
}
其他的
{
返回错误
}
}
类MyClass:NSObject,Proto{
变量名称:String
必需的初始化?(响应:字符串){
self.name=响应
}
func someFunction(){
印刷品(名称)
}
}
var m=MyClass(回答:“你好”)
requires(m)//不能使用“MyClass”类型的参数列表调用“requires”
如果我删除init函数,它会工作-你知道为什么吗?:必需的初始化?(响应:字符串){ self.name=响应 } 因此,是一个可失败的初始值设定项
var m = MyClass(response: "Hey there")
是类型为MyClass?
的可选项。你必须打开这个值,
或使用可选绑定:
if let m = MyClass(response: "Hey there") {
requires(m)
}
MyClass
符合Proto
,但MyClass?
不符合
但是,您的实现不会失败(即返回nil
)
因此,您也可以通过删除问号使初始值设定项不失败:
required init(response: String) { ... }
因此,是一个可失败的初始值设定项
var m = MyClass(response: "Hey there")
是类型为MyClass?
的可选项。你必须打开这个值,
或使用可选绑定:
if let m = MyClass(response: "Hey there") {
requires(m)
}
MyClass
符合Proto
,但MyClass?
不符合
但是,您的实现不会失败(即返回nil
)
因此,您也可以通过删除问号使初始值设定项不失败:
required init(response: String) { ... }
我通过删除
Proto
解决了这个问题:
更改:
func requires<T: Proto>(param: T) -> Bool
func需要(参数:T)->Bool
致:
func需要(参数:T)->Bool
我通过删除Proto
解决了这个问题:
更改:
func requires<T: Proto>(param: T) -> Bool
func需要(参数:T)->Bool
致:
func需要(参数:T)->Bool
无法在iOS或OS X游乐场中重现Xcode 7.1.1的错误。谢谢,我使用的是7.2。我将更新问题以包含Xcode版本。更新:我缺少最后一行“requires(m)”。您是否有时间再次尝试-提前感谢?我现在可以重现该问题。无法在iOS或OS X游乐场中重现Xcode 7.1.1的错误。谢谢,我使用的是7.2。我将更新问题以包含Xcode版本。更新:我缺少最后一行“requires(m)”。你有时间再试一次吗?提前谢谢?我现在可以复制这个问题。谢谢JAL,但这将省去协议约束。谢谢JAL,但这将省去协议约束。