标签: swift2

Nil与预期的参数类型UIViewAnimationOptions不兼容

我刚开始编程并在线阅读教程我无法创建此动画.谁能告诉我它为什么这样说:

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)

uiview ios swift2

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

我什么时候应该将可选值与nil进行比较?

通常,您需要编写如下代码:

if someOptional != nil {
    // do something with the unwrapped someOptional e.g.       
    someFunction(someOptional!)
}
Run Code Online (Sandbox Code Playgroud)

这似乎有点冗长,而且我听说使用!强制解包操作符可能是不安全的,最好避免使用.有没有更好的方法来处理这个?

optional ios swift swift2

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

为什么UITextField的文本属性在Swift 2中更改为可选?

根据UIKit diff文档,在ios9/Swift 2中

var text: String! 已经成为 var text: String?

根据UITextField文档,它特别说

This string is @"" by default.

我不明白这种改变的目的.如果文本字段完全存在,那么该属性是否应始终为空字符串?该字段在什么时候返回一个空字符串?一旦用户与之交互?一旦它被添加到视图层次结构中?它在什么时候返回nil

如果文本字段首先存在,是否始终可以假设文本属性也存在?这似乎只是它会导致大量的查找/替换.text.text!

我没有看到文档中提到它的位置,所以也许有人有一些背景故事或帮助解释为什么会改变.

uitextfield uikit ios swift swift2

43
推荐指数
3
解决办法
9873
查看次数

覆盖Swift 2中的func错误

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 swift2

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

Swift 2.0:没有更多上下文的表达类型是不明确的?

以下用于在Swift 1.2中工作:

var recordSettings = [
    AVFormatIDKey: kAudioFormatMPEG4AAC,
    AVEncoderAudioQualityKey : AVAudioQuality.Max.rawValue,
    AVEncoderBitRateKey : 320000,
    AVNumberOfChannelsKey: 2,
    AVSampleRateKey : 44100.0]
Run Code Online (Sandbox Code Playgroud)

现在,它给出了错误:

"没有更多的上下文,类型表达式是模糊的".

avfoundation ios xcode7 swift2

42
推荐指数
2
解决办法
5万
查看次数

Swift:如何使用可选的for-in循环?

使用可选的for-in循环的正确方法是什么?

现在我总是在循环之前执行可选绑定.还有其他成语吗?

let optionalInt:[Int]? = [1, 2, 3]

if let optionalInt = optionalInt {
  for i in optionalInt {
    print(i)
  }
}
Run Code Online (Sandbox Code Playgroud)

optional for-in-loop swift2

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

在Swift中扩展嵌套类型

我有一个主类,也提供了一个命名空间:

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提交一份错误报告.

swift2

42
推荐指数
1
解决办法
4653
查看次数

Dictionary的扩展名为<String,AnyObject>

我正在尝试创建一个字典扩展,其中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'的预期类型

dictionary swift swift2

40
推荐指数
5
解决办法
3万
查看次数

导入ObjC框架时,Swift调试器不显示变量值

当我使用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应用程序中的相同框架可以调试得很好.

debugging xcode frameworks swift2 xcode7-beta2

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

如果两个数组包含相同的元素,无论这些元素出现的顺序如何,我如何检入Swift?

假设有两个阵列......

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()不断删除数组包含的一些(通常是重复的)对象.

任何帮助,将不胜感激.

arrays swift swift2

39
推荐指数
4
解决办法
3万
查看次数