当前位置: 首页 > 面试题库 >

swift类作为不带.self的参数

冀望
2023-03-14
问题内容

我已经编写了一些函数(Swift 2.1,XCode 7.1.1):

public func test1<T:UIView>(type: T.Type) -> T {
    print(type.dynamicType)
    return type.init()
}

public func test2<T:UIView>(type: T.Type)(_ n: Int) -> T {
    print(type.dynamicType)
    return type.init()
}

public func test3<T1:UIView, T2:UIView>(type1: T1.Type, _ type2: T2.Type) {
    print(type1.init())
    print(type2.init())
}

public func test4<T:UIView>(type: T.Type, _ n: Int) {
    print(type.init())
    print(n)
}

public func test5<T:UIView>(n: Int,_ type: T.Type) {
    print(type.init())
    print(n)
}

并致电给他们:

test1(UIButton)
test1(UIButton.self)

test2(UIButton)(1)
test2(UIButton.self)(1)

test3(UIButton.self, UITextField.self)

test4(UIButton.self, 1)

test5(1, UIButton.self)

如您所见,当类型是唯一参数时,它可以省略“ .self”。但是对于所有不仅具有类型参数的函数,它们都需要“ .self”。

我想知道:

  1. 这是为什么?
  2. 以及如何在使用它的地方声明一个不需要“ .self”的具有多个参数的函数?

问题答案:

巧合的是,这只是迅速发展而已。.self在Type是唯一的参数时,该功能被忽略,这在Swift中已报告为错误。

苹果相关报价:

这是一个错误。.self应该到处都需要。不幸的是,我们已经有一段时间了该错误,所以我不确定通过更改它会破坏多少代码。如果我们想删除该要求,那将被视为一种语言更改,并且必须经过Swift
Evolution流程。



 类似资料:
  • 问题内容: 除了带有协议扩展的语法外: …我偶然发现您可以在协议本身上使用相同的where子句: 请注意,这是 不 一样的where子句限制一个通用的协议,并 没有 自己做P上的通用协议。 我的实验似乎表明,此处只能使用冒号,并且冒号后面的内容必须是类或协议(可能是通用的)。 我很好奇:这是怎么逃避我的注意的?所以我去寻找它何时出现的证据。在Swift 3.0中,前一种语法是合法的,但后者 则不

  • 当我定义一个类时,我如何在它的方法签名中包含必须属于同一类的参数?我正在构建一个应该这样工作的图结构,但是这里有一个简化的例子: 这将导致以下错误: 我的意思是,我可以用Python 2的方式来做,但是我希望有比这更Python-3-ic的解决方案:

  • 问题内容: 我希望能够从Nib中提取UIView子类的实例。 我希望能够调用MyCustomView.instantiateFromNib()并具有MyCustomView的实例。我几乎已经准备好通过桥接头文件来移植我拥有的工作中的Objective- C代码,但是我想我会首先尝试惯用的方法。那是两个小时前。 现在是错误的,因为“’是’之后的预期类型”。在那之后我尝试过的内容显示了很多我对Swif

  • 问题内容: 我是新手,所以我的代码可能会出现很多错误,但是我要实现的目标是将GET请求发送到带有 参数的服务器。鉴于我的函数有两个参数,我试图做到更多。我不确定如何将两者结合到实际的URLRequest中?到目前为止,这是我尝试过的 问题答案: 建立请求时,请求的主体没有,但是所有内容都放在URL上。要构建网址(并正确地将其转义), 您还可以使用. 唯一的窍门是,大多数Web服务都需要+转义字符百

  • 问题内容: 在Objective- C中,可以将符合协议的类指定为方法参数。例如,我可以有一个只允许符合的方法: 我找不到在Swift中执行此操作的方法(也许尚不可能)。您可以使用来指定多种协议,但是您又如何要求该对象属于特定类呢? 问题答案: 您可以将其定义为通用函数,并使用类型约束来同时要求类和协议。 斯威夫特4 Swift 3 (也适用于Swift 4) 迅捷2

  • 问题内容: 我来自Java背景,当您声明内部类时,它是静态的,不能访问外部类的实例,或者它不是静态的,并且可以访问正在被访问的外部类的实例。进行操作。参见http://en.wikipedia.org/wiki/Inner_class#Types_of_nested_classes_in_Java 斯威夫特对此有什么概念吗?从测试中,我似乎无法访问的对象,但是我肯定做错了。 问题答案: AFAIK