我知道在Swift中所有变量都必须设置一个值,并且通过使用选项,我们可以设置一个nil
最初设置的变量.
我不明白的是,用a设置一个变量!
是做什么的,因为我认为这会从一个可选项中"解开"一个值.我想通过这样做,你保证有一个值来展开该变量,这就是为什么在IBActions上你会看到它被使用.
所以简单地说,当你做这样的事情时,初始化的变量是什么:
var aShape : CAShapeLayer!
Run Code Online (Sandbox Code Playgroud)
为什么/我什么时候会这样做?
我需要做这个有奇怪配置的应用程序.
如下图所示,主视图是UIScrollView.然后里面应该有一个UIPageView,而PageView的每个页面都应该有一个UITableView.
到目前为止我已经完成了这一切.但我的问题是我希望滚动行为 自然.
接下来是我的意思自然.目前,当我滚动其中一个UITableViews时,它会滚动tableview(而不是scrollview).但我希望它滚动ScrollView,除非scrollview无法滚动导致它到达顶部或底部(在这种情况下,我希望它滚动tableview).
例如,假设我的滚动视图当前滚动到顶部.然后我把手指放在桌面视图(显示的当前页面)上并开始向下滚动.在这种情况下,我希望滚动视图滚动(没有tableview).如果我继续向下滚动我的滚动视图并且它到达底部,如果我从显示器上移开手指并将其放回tebleview并再次向下滚动,我希望我的tableview现在向下滚动,因为滚动视图到达底部并且它不是能够继续滚动.
你们对如何实现这种滚动有任何想法吗?
我真的迷失了.任何帮助将非常感激它:(
谢谢!
可选项的全部原因是为了防止因命中分配给nil/null/none的变量而导致的运行时崩溃.因此,变量不能为零; 相反,它们可以包含在一个Optional类型中,该类型将它们表示为Some或None,并解包以获取Some的具体内容,或者为nil.
但是如果你用它们!
或者用Implicitly Unwrapped Optionals 打开它们,你只需要引入运行时崩溃的可能性,因为你是一个不完美的编码器.如果你使用它if let
来安全地打开它们,你可以避免崩溃,但是你被困在if let
语句的范围内以使用Some中的值,你仍然需要处理潜在的nil情况.如果使用?为了调用方法暂时解包,它将在完成后重新包装,引入多层次可选包装的混乱可能性.
所以:在我看来,要做的是避免选项,除非必要时(例如,当调用返回它们的框架方法时).但是,如果我不使用选项,那意味着我的对象引用必须是非零的,我无法弄清楚如何处理由于某种原因不应该存在或者不存在的情况,分配给对象引用的值.
我的问题是:我如何避免需要零?看起来它需要一种不同的编程方法.(或者我应该只使用选项,如果这就是我正在做的,那么除了像其他语言那样简单地对对象引用进行空分配外,它有什么用?)
我知道这可能是一个主观问题,但我还应该问其他问题呢?我不是想哄骗或激起辩论,我真的很想知道正确的方法是什么,因为我写了更多的Swift代码.
在Swift中,我可以声明一个类型的常量Any
并将其String
放入其中.
let any: Any = "hello world"
Run Code Online (Sandbox Code Playgroud)
好.另一方面,我不能将nil
值放入,any
因为它不是可选的.
let any: Any = nil
error: nil cannot initialize specified type 'Any' (aka 'protocol<>')
let any: Any = nil
^
Run Code Online (Sandbox Code Playgroud)
完善.但是为什么编译器允许我编写以下代码?
let couldBeNil: String? = nil
let any: Any = couldBeNil
print(any) // nil
Run Code Online (Sandbox Code Playgroud)
不Any
遵循Swift规则只能填充一个Optional var/let nil
吗?
使用Xcode Playground 7.2 + Swift 2.1.1进行测试
我有一种情况需要覆盖属性的getter.
假设我们有:
public class MyBaseClass {
private var _name: String
public internal(set) var name: String {
get {
return self._name
}
set {
self._name = newValue
}
}
}
Run Code Online (Sandbox Code Playgroud)
我猜,没什么特别的.
现在,如果我尝试覆盖派生类中的getter:
public class MyDerivedClass: MyBaseClass {
public var name: String {
get {
return "Derived - \(super.name)"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我得到编译错误:无法使用只读属性"name"覆盖mutable属性.
如果我尝试添加setter并覆盖它:
public class MyDerivedClass: MyBaseClass {
public internal(set) var name: String {
get {
return "Derived - \(super.name)"
}
set {
super.name = newValue
}
}
} …
Run Code Online (Sandbox Code Playgroud) 看一个Swift 示例:
if let sourceViewController = sender.sourceViewController as? MealViewController, meal = sourceViewController.meal {
...
}
Run Code Online (Sandbox Code Playgroud)
该文件指出:
...代码将视图控制器分配给本地常量sourceViewController,并检查sourceViewController上的meal属性是否为nil.
问题:当用逗号分隔时,Swift是否允许你在if语句中有多个条件(如本例中的逗号后面所示MealViewController
)?
在文档中没有看到这个.
我是Swift和Xcode的新手.我正在运行macOS Sierra和Swift 3.
对于我在Swift中的第一次尝试,我正在开发一个简单的命令行工具.我想要使用几个Swift包,GitHub上的两个包的安装说明都说使用Swift包管理器只需将它们作为依赖项添加到包清单文件中.
我无法弄清楚的是如何在Xcode中做到这一点.我只是在项目的根目录中创建一个'package.swift'文件吗?执行此操作然后运行项目似乎不起作用,因为似乎没有将所需的包添加到我的项目中.
难道我做错了什么?
我是初学者,对Swift
操作员没有先进的知识.
我有以下课程
class Container {
var list: [Any] = [];
}
Run Code Online (Sandbox Code Playgroud)
我想实现运算符subscript []
以便从中访问数据list
.
我需要这样的东西:
var data: Container = Container()
var value = data[5]
// also
data[5] = 5
Run Code Online (Sandbox Code Playgroud)
我也希望能够写出这样的东西:
data[1][2]
Run Code Online (Sandbox Code Playgroud)
是否可以考虑1
来自的元素Container
是array
?
Thanx寻求帮助.
我在黑暗的屏幕上有一个移动的黑色图像,以便更容易看到我想为图像添加白色光晕.这是我的动态图像代码:
Ghost = SKSpriteNode(imageNamed: "Ghost1")
Ghost.size = CGSize(width: 50, height: 50)
Ghost.position = CGPoint(x: self.frame.width / 2 - Ghost.frame.width, y: self.frame.height / 2)
Ghost.physicsBody = SKPhysicsBody(circleOfRadius: Ghost.frame.height / 1.4)
Ghost.physicsBody?.categoryBitMask = PhysicsCatagory.Ghost
Ghost.physicsBody?.collisionBitMask = PhysicsCatagory.Ground | PhysicsCatagory.Wall
Ghost.physicsBody?.contactTestBitMask = PhysicsCatagory.Ground | PhysicsCatagory.Wall | PhysicsCatagory.Score
Ghost.physicsBody?.affectedByGravity = false
Ghost.physicsBody?.isDynamic = true
Ghost.zPosition = 2
self.addChild(Ghost)
Run Code Online (Sandbox Code Playgroud)
我不知道如何或如何使用添加发光,如果您需要更多信息,请询问.
有没有办法从Apple Watch推出iOS应用程序?
编辑: - 尝试使用下面的两个api但不起作用: -
Apple Watch Code
调用insideController.m
+ (BOOL)openParentApplication:(NSDictionary *)userInfo reply:(void(^)(NSDictionary *replyInfo, NSError *error)) reply; // launches containing iOS application on the phone. userInfo must be non-nil
Run Code Online (Sandbox Code Playgroud)
iOS代码
在Appdelegate.m内部调用
- (void) application:(UIApplication *) application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply
Run Code Online (Sandbox Code Playgroud) swift ×9
optional ×4
ios ×3
apple-watch ×1
cifilter ×1
if-statement ×1
inheritance ×1
macos ×1
objective-c ×1
overriding ×1
skeffectnode ×1
sprite-kit ×1
uikit ×1
uiscrollview ×1
uitableview ×1
watchkit ×1
xcode ×1