我刚开始编程并在线阅读教程我无法创建此动画.谁能告诉我它为什么这样说:
Nil与预期的参数类型UIViewAnimationOptions不兼容
以及如何解决它?
view.addSubview(myFirstLabel)
UIView.animateWithDuration(0.5, delay: 0.0, usingSpringWithDamping: 0.0, initialSpringVelocity: 0.0, options: nil, animations: {
self.myFirstLabel.center = CGPoint(x: 100, y:40 + 200)
}, completion: nil)
Run Code Online (Sandbox Code Playgroud) 通常,您需要编写如下代码:
if someOptional != nil {
// do something with the unwrapped someOptional e.g.
someFunction(someOptional!)
}
Run Code Online (Sandbox Code Playgroud)
这似乎有点冗长,而且我听说使用!强制解包操作符可能是不安全的,最好避免使用.有没有更好的方法来处理这个?
根据UIKit diff文档,在ios9/Swift 2中
var text: String! 已经成为 var text: String?
根据UITextField的文档,它特别说
This string is @"" by default.
我不明白这种改变的目的.如果文本字段完全存在,那么该属性是否应始终为空字符串?该字段在什么时候返回一个空字符串?一旦用户与之交互?一旦它被添加到视图层次结构中?它在什么时候返回nil?
如果文本字段首先存在,是否始终可以假设文本属性也存在?这似乎只是它会导致大量的查找/替换.text到.text!
我没有看到文档中提到它的位置,所以也许有人有一些背景故事或帮助解释为什么会改变.
XCode 6中的此代码没有错误,但在XCode 7(Swift 2)中发生了此错误:
方法不会覆盖其超类中的任何方法
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
/* Called when a touch begins */
}
Run Code Online (Sandbox Code Playgroud)
删除override单词时发生此错误:
方法'的touchesBegan(::) withEvent'与目标C选择'的touchesBegan:withEvent:方法'与方法冲突'的touchesBegan( :从超类的UIResponder'withEvent :)'具有相同的目标C选择
以下用于在Swift 1.2中工作:
var recordSettings = [
AVFormatIDKey: kAudioFormatMPEG4AAC,
AVEncoderAudioQualityKey : AVAudioQuality.Max.rawValue,
AVEncoderBitRateKey : 320000,
AVNumberOfChannelsKey: 2,
AVSampleRateKey : 44100.0]
Run Code Online (Sandbox Code Playgroud)
现在,它给出了错误:
"没有更多的上下文,类型表达式是模糊的".
使用可选的for-in循环的正确方法是什么?
现在我总是在循环之前执行可选绑定.还有其他成语吗?
let optionalInt:[Int]? = [1, 2, 3]
if let optionalInt = optionalInt {
for i in optionalInt {
print(i)
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个主类,也提供了一个命名空间:
class A {
}
Run Code Online (Sandbox Code Playgroud)
和一个通过扩展添加的嵌套类(所有这些都是为了使用单独的文件):
extension A {
class B {
}
}
Run Code Online (Sandbox Code Playgroud)
我想通过扩展它来为嵌套类(B)添加功能; 我试过了:
extension A.B {
}
Run Code Online (Sandbox Code Playgroud)
我得到"'B'不是'A'的成员类型".
(我也尝试了一些不太合理的东西,但我会在这里省略它们以避免尴尬.阅读Swift文档和谷歌搜索"快速嵌套类扩展"也没有得出答案.)
知道是否以及如何实现这一目标?
更新:
感谢user3441734试用它时,此代码在单个文件(或Playground)中按预期工作!
当3个部分位于单独的文件中时仍然不起作用,可能是当前Swift编译器实现中的一个错误.我将向Apple提交一份错误报告.
我正在尝试创建一个字典扩展,其中Dictionary的类型为<String,AnyObject>.
在许多地方寻找并尝试不同的方法,但它们似乎都没有工作.这是其中之一:
extension Dictionary where <String, AnyObject>{
var jsonString:String {
return ""
}
}
Run Code Online (Sandbox Code Playgroud)
另一种因某种原因实际上无法工作的方法:
extension Dictionary where Key:Hashable, Value:AnyObject {
var jsonString:String {
do {
let stringData = try NSJSONSerialization.dataWithJSONObject(self, options: NSJSONWritingOptions.PrettyPrinted)
if let string = String(data: stringData, encoding: NSUTF8StringEncoding){
return string
}
}catch _ {
}
return ""
}
}
Run Code Online (Sandbox Code Playgroud)
得到:参数类型'Dictionary'不符合'AnyObject'的预期类型
当我使用Sprite Kit创建一个新的OS X"Game"项目,并在任何地方设置断点时,我可以看到变量值就好了:

然后我更改代码以导入我自己的框架(TilemapKit),这是一个纯粹的Objective-C框架:
import SpriteKit
import TilemapKit
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
print("dang!")
}
}
Run Code Online (Sandbox Code Playgroud)
没有其他变化.我甚至没有使用任何TilemapKit代码.当断点触发时,我看到:

就观察变量值而言,整个项目停止可调试.这种行为完全一致.没有框架导入,我可以再次调试.
由于我使用Xcode 7 beta(7A121l)和OS X 10.11开发人员预览版,我知道这可能只是一个(临时)错误.
命令行Tiles设置为使用Xcode 7.0版本btw.我尝试在框架目标中启用模块,确保部署目标相同(10.11),禁用符号剥离.我在其中添加了一个Bridging Header和#imported TilemapKit框架(在这种情况下删除Swift导入仍然会给我不可调试的应用程序,所以我导入框架的方式和位置似乎并不重要).
有没有人建议什么可能导致这种行为以及我如何解决这个问题 - 或者至少我如何尝试缩小问题?
罪魁祸首是否更有可能与项目的框架构建设置相关联?我是否需要在应用程序项目中启用某些内容以使其与ObjC框架兼容?(我已在其他链接器标志中获得-ObjC)
更新:
我跑进po self调试控制台,发现了这个通知:
<built-in>:3:6: error: module 'TilemapKit' was built in directory '/TilemapKit.framework' but now resides in directory './TilemapKit.framework'
#define __clang_major__ 7
^
missing required module 'TilemapKit'
Debug info from this module will be unavailable in the debugger.
Run Code Online (Sandbox Code Playgroud)
为什么框架构建目录发生了变化?那为什么会这么重要以及如何解决这个问题?
PS:新的ObjC应用程序中的相同框架可以调试得很好.
假设有两个阵列......
var array1 = ["a", "b", "c"]
var array2 = ["b", "c", "a"]
Run Code Online (Sandbox Code Playgroud)
我希望这两个数组的比较结果是真的,以下是......
var array1 = ["a", "b", "c"]
var array2 = ["b", "c", "a", "d"]
Run Code Online (Sandbox Code Playgroud)
......是假的 我怎样才能在Swift中实现这一目标?我试图将两个数组转换为集合,但由于某种原因,Set()不断删除数组包含的一些(通常是重复的)对象.
任何帮助,将不胜感激.
swift2 ×10
swift ×5
ios ×4
optional ×2
arrays ×1
avfoundation ×1
debugging ×1
dictionary ×1
for-in-loop ×1
frameworks ×1
uikit ×1
uitextfield ×1
uiview ×1
xcode ×1
xcode7 ×1
xcode7-beta2 ×1