相关疑难解决方法(0)

Swift变量装饰用"?" (问号)和"!" (感叹号)

我知道在Swift中所有变量都必须设置一个值,并且通过使用选项,我们可以设置一个nil最初设置的变量.

我不明白的是,用a设置一个变量!是做什么的,因为我认为这会从一个可选项中"解开"一个值.我想通过这样做,你保证有一个值来展开该变量,这就是为什么在IBActions上你会看到它被使用.

所以简单地说,当你做这样的事情时,初始化的变量是什么:

var aShape : CAShapeLayer!
Run Code Online (Sandbox Code Playgroud)

为什么/我什么时候会这样做?

optional swift

103
推荐指数
1
解决办法
2万
查看次数

Swift语言中属性中的感叹号是什么?

在Swift中声明属性有三种方法:

var optStr: String?
var normStr: String = "normStr"
var exactStr: String!
Run Code Online (Sandbox Code Playgroud)

第一个是具有optional类型的属性,在我们的例子中可以包含nil或String的类型.第二个是始终包含String 的属性.它应该在init或声明中初始化.

但第三种方式呢?

var exactStr: String!
Run Code Online (Sandbox Code Playgroud)

我在操场上做了一些实验,事实证明,需要一个功能,type?可以采取两种type,type?type!变量作为参数:

var optStr: String?
var normStr: String
var forcedStr: String!

func printStr(str: String?) {
    println("str: \(str)")
}

printStr(optStr) //prints: "str: nil"
//printStr(normStr) //doesn't compile as not initialized
printStr(forcedStr) //prints: "str: nil"

optStr = "optStr"; normStr = "normStr"; forcedStr = "forcedStr"

printStr(optStr) //prints "str: optStr"
printStr(normStr) //prints "str: normStr"
printStr(forcedStr) //prints …
Run Code Online (Sandbox Code Playgroud)

swift

44
推荐指数
1
解决办法
2万
查看次数

在斯威夫特,这是什么!符号是指函数签名?

在Swift函数签名中,!后面的参数意味着什么?更具体地说,它是否意味着参数需要在传入之前解包,或者在传入时自动解包(这是自动).这是一个示例:

func annotationButtonTUI(sender: UIButton!) { }
Run Code Online (Sandbox Code Playgroud)

在这种情况下,该函数是UIButton的目标,因此无论发生什么事情!都会自动发生.

我的想法是它意味着你可以期待一个未包装的sender物体,所以你不需要尝试打开它.

swift

38
推荐指数
2
解决办法
1万
查看次数

如何避免强行展开变量?

我该如何避免使用!使用此功能解压缩操作通常是一个不好的选择.

使用它的代码有什么更好的选择,使用它使代码看起来更简单,因为if检查变量!被召唤永远不会是零,所以不能崩溃.

我的导师向我们介绍了bang(!)操作员,然后告诉我们再也不要使用它了.告诉我们为什么当然,如果可选项为零,它将使我们的应用程序崩溃.

然而,我发现自己处于这样的情况下,爆炸操作员似乎是最简洁和安全的选择.

func fullName() -> String {
    if middleName == nil {
        return "\(firstName) \(lastName)"
    }else{
        return "\(firstName) \(middleName!) \(lastName)"
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做这样的事情?

此外,如果有人想知道,这是完整的课程.

class CPerson{
    var firstName: String
    var middleName: String?
    var lastName: String

    init(firstName: String, middleName: String?, lastName: String) {
        self.firstName = firstName
        self.middleName = middleName
        self.lastName = lastName
    }
    convenience init(firstName: String, lastName: String) {
        self.init(firstName: firstName, middleName: nil, lastName: lastName)
    }
    func fullName() -> String {
        if middleName == nil {
            return "\(firstName) \(lastName)" …
Run Code Online (Sandbox Code Playgroud)

swift

27
推荐指数
3
解决办法
5504
查看次数

如何使类符合swift中的协议?

我需要使一个类符合Swift中的协议才能实现委托.我该怎么办?

ios swift

20
推荐指数
1
解决办法
1万
查看次数

斯威夫特,两个问题.1)弱变量2)@IBOutlet的bang运算符

每:

@IBOutlet weak var nameLabel: UILabel!
Run Code Online (Sandbox Code Playgroud)
  1. 每当我声明我的IBOutlets时,我只使用var而不是weak var.但我最近遇到了一些使用弱var的代码模板.他们为什么这样做?还有什么好处?

  2. 为什么在UILabel结束时会有一个爆炸操作员.我知道这是必需的,我和它一起去,但现在就问它.

提前致谢.

operators iboutlet automatic-ref-counting swift

20
推荐指数
2
解决办法
7458
查看次数

如何在Swift中实现可选值?

我想知道如何实现Swift(Int,Float ...)中的值类型来支持可选绑定("?").我假设这些值类型没有在堆上分配,而是在堆栈上分配.那么,它们是否依赖某种指向可能为null的堆栈的指针,或者底层struct是否包含布尔标志?

optional swift

19
推荐指数
2
解决办法
3040
查看次数

Swift或其他语言的Optionals术语

在Swift中,我们操作的元素都有类型.

当我们使用这些类型时,我们可以添加一个' !',' '或者没有表达他们的可空性.

  1. 我怎么称呼' '或' !'用来表达这个特质?

一个类型的装饰者?装饰师?接线员?别的什么?

  1. 在使用此字符时,我应该将所谓的类型称为什么?

这是一种新型吗?它是装饰类型吗?一种类型的变化?

swift编译器似乎将它们视为新类型,但我的问题不是实现或语言相关,因此我将其标记为语言不可知.

编辑:我正在寻找一个与语言无关的名字.我理解pranjalsatija的评论选项被定义为compound type.但是,这是一个语言实现细节.我可以将我的问题改为:

当使用类型定义时,您将具有特殊含义的字符称为什么,以及如何调用派生类型.

这个术语应该适用于红宝石中的资本套管常数,因为概念是相似的.

language-agnostic optional swift

6
推荐指数
2
解决办法
519
查看次数

两者之间有什么技术差异?&!在快速的语言?

任何人都可以详细解释之间的技术差异!&?我们在快速语言中使用的文字.基本上在苹果开发者文档中,他们将其称为零验证,但我并不清楚它背后的逻辑.你能用一些实时逻辑解释一下吗?

在此先感谢用户.

iphone xcode ios swift ios8

5
推荐指数
1
解决办法
5462
查看次数

什么是解包变量?

我一直试图理解选项的概念并隐式解包可选但我只是没有得到术语?我的问题是:

  1. 什么是编程包装?包裹的字符串是什么?
  2. 什么是解缠?
  3. 可选(?)和隐式解包功能(!)之间有什么区别
  4. 你什么时候用?要么 !
  5. 它们隐含地隐含在未包装的可选项中是什么意思?

解包只是揭示变量的真值,无论它是零还是值?

swift

4
推荐指数
1
解决办法
2669
查看次数