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

在Swift中,“自我”有什么用?

程景胜
2023-03-14
问题内容

我是Swift的新手,我想知道self它的用途以及原因。

我已经在类和结构中看到了它,但是我真的没有发现它们在我的代码中提到它们是必不可少的。它们的用途是什么?为什么?在什么情况下有必要使用它?

我一直在阅读很多关于该问题的问题和答案,但是没有一个能够完全回答我的问题,而且他们总是倾向于将其与thisJava中的情况进行比较,对此我并不陌生。


问题答案:

创建扩展时,您还将经常使用self,例如:

extension Int {
    func square() -> Int {
        return self * self
    }

    // note: when adding mutating in front of it we don't need to specify the return type
    // and instead of "return " whatever
    // we have to use "self = " whatever

    mutating func squareMe() {
        self = self * self
    }
}
let x = 3
let y = x.square()  
println(x)         // 3
printlx(y)         // 9

现在假设您要更改var结果本身,则必须使用mutating func进行更改

var z = 3

println(z)  // 3

现在让它变异

z.squareMe()

println(z)  // 9

//现在来看另一个使用字符串的示例:

extension String {
    func x(times:Int) -> String {
        var result = ""
        if times > 0 {
            for index in 1...times{
                result += self
            }
            return result
        }
        return ""
    }

    // note: when adding mutating in front of it we don't need to specify the return type
    // and instead of "return " whatever
    // we have to use "self = " whatever

    mutating func replicateMe(times:Int){
        if times > 1 {
            let myString = self
            for index in 1...times-1{
                self = self + myString
            }
        } else {
            if times != 1 {
                self = ""
            }
        }
    } 
}


var myString1 = "Abc"
let myString2 = myString1.x(2)

println(myString1)         // "Abc"
println(myString2)         // "AbcAbc"

现在让我们更改myString1

myString1.replicateMe(3)

println(myString1)         // "AbcAbcAbc"


 类似资料:
  • 元类型和? 做和返回一个? 我知道可以用来检查。你如何使用?

  • 问题内容: 这两个类别有何不同? 有什么明显的区别吗? 问题答案: 是一个 类变量 。 的是一个 实例变量 。 即的被实例之间共享。 用可以像列表这样修改的东西更容易证明区别: 输出量

  • 我对Swift中关于var和关键字{get set}的使用的协议有疑问。 来自Apple文档: 这将不是公正的: 我错过了什么?

  • 问题内容: 我已经使用Xcode 6和快速语言创建了一个示例项目。 Xcode使用以下代码创建了AppDelegate.swift @NSApplicationMain是什么意思,带有main()的main.mm/main.m文件在哪里? 问题答案: 如发行说明中所述: OS X应用程序现在可以将@NSApplicationMain属性应用于其应用程序委托类,以便为该应用程序生成隐式主程序。此属性

  • 问题内容: Swift中的切片是什么,它与数组有何不同? 从文档中,下标(Range)的类型签名为: 为什么不返回另一个而不是一个? 看起来我可以将切片与数组连接起来: 但这会产生错误: 无法找到接受提供的参数的“下标”的重载 什么是切片? 问题答案: 切片指向数组。当数组已经存在并且切片只能描述其所需部分时,再也没有必要制作另一个数组。 加法会导致隐式强制,因此可以正常工作。为了使您的作业正常进

  • 问题内容: 在Swift中,我看到一些类似的方法: 我想知道何时使用@objc?我读了一些文档,但他们说要在Objective-C中调用它时,应添加@objc标志 但是,这是Swift中的私有函数,@ obj的作用是什么? 问题答案: private表示仅在Swift中可见。因此使用@objc在Objective-C中可见。如果您有功能可以快速选择私有功能,则需要此功能。 @objc属性使您的Sw