以下代码工作正常
struct carConfi {
var owner: String?
let brand: String = "BMW"
var currentMile: Double = 2000
}
let tomCar = carConfi()
Run Code Online (Sandbox Code Playgroud)
但是,如果我将属性的类型更改owner为常量,则初始化程序将出错
struct carConfi {
let owner: String? // Change to constant
let brand: String = "BMW"
var currentMile: Double = 2000
}
let tomCar = carConfi() //error: missing argument for parameter 'owner' in call
Run Code Online (Sandbox Code Playgroud)
我做了一点搜索,结果是因为可选变量自动具有默认值nil
我猜:因为一旦设置了常量,它就无法更改,如果可选常量自动收到,nil那么它将保持不变nil,非常愚蠢,可能会对用户产生影响
问:我的大学并不完全相信猜测,他告诉我必须有更多理由.如果有人能向我解释,我将非常感激
谢谢
Swift的字符串类型是值类型.如果创建新的String值,则在将String值传递给函数或方法时,或者将其赋值给常量或变量时,将复制该String值.
它被分配给常量或变量时被复制,这对我来说很有意义.但是当传递给函数的值类型变量也会被复制时,这会让我感到困惑.
题
将值类型变量传递给函数时如何复制?什么样的"空间"持有这个副本?它是在场景后面无形地创建的某种临时变量,在函数进程被破坏之后?
谢谢
让我们从代码片段开始:
St Foo {
var proA: Int = 0 { // needs initialization
willSet {
print("about to set proA to \(newValue) from \(proA)")
}
didSet {
print("already set proA to \(proA) from \(oldValue)")
}
}
var ProB: Int { // do not needs initialization
return 1
}
}
let foo = Foo()
foo.proA = 23
print(foo.ProB)
Run Code Online (Sandbox Code Playgroud)
以下是我个人对存储和计算属性的一些理解:
a:只有观察者的属性(willSet 和 didSet)不是计算属性而是存储属性(例如上面代码中的proA属性)。
b:计算属性不能有初始化(见上面代码的注释)。
c: setter 相当于属性观察者,属性观察者只是变异前后的 setter + 观察者。
问题:
1.我想知道是什么使属性成为计算属性?只要该属性有一个 getter 并返回它就是一个计算属性,这是否正确?
2.我的所有理解(a, b & c)都正确吗?如果没有,请您指出来。
3. …
环境表达式通常直接赋值,如下例所示
- name: set up env var
env:
TAG: v1.2.3
run: echo $TAG
Run Code Online (Sandbox Code Playgroud)
但是如何从 shell 脚本评估中获取值呢?例如,在我的终端中,我可以通过以下方式获取当前标签git describe --exact-match --tags $(git log -n1 --pretty='%h')
但是当我尝试将此脚本放入环境中时,如下所示
- name: set up env var
env:
TAG: $(git describe --exact-match --tags $(git log -n1 --pretty='%h'))
run: echo $TAG
Run Code Online (Sandbox Code Playgroud)
打印出的 echo$(git describe --exact-match --tags $(git log -n1 --pretty='%h'))意味着它不被计算而是被视为字符串。
如何获取 的值git describe --exact-match --tags $(git log -n1 --pretty='%h')并将其分配给环境变量TAG?
我创建了以下课程
class Person {
var firstName: String
var lastName: String
init(firstName: String, lastName: String) {
self.firstName = firstName
self.lastName = lastName
}
func fullName() -> String {
return "\(firstName) \(lastName)"
}
}
Run Code Online (Sandbox Code Playgroud)
然后我从类中实例化了一个常量值
let john = Person(firstName: "Johnny", lastName: "Applessed")
Run Code Online (Sandbox Code Playgroud)
问题:为什么我可以更改变量的内容john?这不是常数吗?有人可以帮我解释一下,非常感谢。
john.firstName = "John"
print(john.firstName) // -> John
Run Code Online (Sandbox Code Playgroud) 斯威夫特的官方文件说
您可以像使用Swift中的任何其他类型一样使用函数类型.例如,您可以将常量或变量定义为函数类型,并为该变量分配适当的函数:
func addTwoInts(a: Int, _ b: Int) -> Int {
return a + b
}
var mathFunction: (Int, Int) -> Int = addTwoInts
Run Code Online (Sandbox Code Playgroud)
这里是示例代码:
它定义一个名为的变量
mathFunction,它具有一个带两个Int值的函数类型,并返回一个Int值.设置此新变量以引用名为addTwoInts的函数
问题:函数类型可以像Swift中的任何其他类型一样使用,我想知道,因为我如何创建一个类型别名,它具有一个带有两个Int值的函数类型,并返回一个Int值.设置此新变量以引用名为addTwoInts的函数
我试过这个,显然,我错了.
class Person{
let name: String
init(name: String) {
self.name = name
}
}
var john: Person?
Run Code Online (Sandbox Code Playgroud)
上面的代码片段定义了一个名为 的可选类型变量john。此时,变量的初始值为nil。
类实例将其值保存在堆空间中并将引用存储在堆栈中。(如果我错了,请纠正我)john在这种情况下是一个未分配的可选变量,它还没有引用任何实例。
问题:PC 在哪里存储名称字符串“john”?它是否已经被创建并存储在堆栈中并等待对堆中某个实例的引用?值“nil”存储在哪里?
非常感谢
创造了一辆超级轿车和一辆子级捷豹.子类中的函数info() - > Void覆盖了超类的功能.已经创建了一个名为theAuto of Jaguar的实例.
问题:
看来我不能起来铸请将auto到的类型汽车,请参阅代码片断,其意见
class Car {
func info() {
print("You've got a car")
}
}
class Jaguar : Car {
override func info() {
print("You've got a Jaguar")
}
}
let theAuto = Jaguar()
theAuto.info() // --> You've got a Jaguar
let auto = theAuto as Car // casting but seems not working
auto.info() // --> You've got a Jaguar
print(type(of: auto)) // …Run Code Online (Sandbox Code Playgroud) 完成处理程序闭包在ios开发中很常见.例如dataTask(with:completionHandler:)在URLSession类中.
UI引擎由主线程管理,URLSession的API调用在后台线程下运行,如果处理程序中需要UI更新,则需要将其调度到主线程.
问题1:来自ios框架的所有完成Handler闭包是否都在后台线程中运行?
问题1.1:例如,开发人员创建的所有转义闭包是否都在后台线程中运行?
问题2:我在iPhone X模拟器中看到了多达8个线程.哪一个是主线程,哪一个是ios中的后台线程?他们有不同的优先级和计算能力吗?
在由 conda 构建的 python 项目上测试 azure devops 管道
jobs:
- job: pre_build_setup
displayName: Pre Build Setup
pool:
vmImage: 'ubuntu-18.04'
steps:
- bash: echo "##vso[task.prependpath]$CONDA/bin"
displayName: Add conda to PATH
- job: build_environment
displayName: Build Environment
dependsOn: pre_build_setup
steps:
- script: conda env create --file environment.yml --name build_env
displayName: Create Anaconda environment
- script: conda env list
displayName: environment installation verification
- job: unit_tests
displayName: Unit Tests
dependsOn: build_environment
strategy:
maxParallel: 2
steps:
- bash: conda activate build_env
Run Code Online (Sandbox Code Playgroud)
最后一步- bash: …