小编Air*_*ity的帖子

我什么时候应该将可选值与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万
查看次数

无法推断出泛型参数的参数

我正在尝试使用NSUserDefaults保存数组然后加载数组,但是我得到错误"无法推断出泛型参数的参数".有什么我做错了吗?似乎没有人在swift中遇到这个问题,所以我找不到任何解决方案.

IBAction func loadData(sender: AnyObject) {
    if let testCompositeArray = defaults.objectForKey("testScoreSATArray") as? Array {        
        self.showDataLabel.text = defaults.objectForKey("testScoreSATArray") as Array
    }
}
Run Code Online (Sandbox Code Playgroud)

nsuserdefaults loaddata swift

38
推荐指数
1
解决办法
4万
查看次数

Initializer不会覆盖其超类中的指定初始值设定项

所以我刚刚升级到Xcode 6.3 Beta 3,并且出现了很多与以下内容相关的错误:

Initializer不会覆盖其超类中的指定初始值设定项.

override init() {
    super.init()
}
Run Code Online (Sandbox Code Playgroud)

例如,这是一个UIButton类:

class CustomButton: UIButton {

    var target: AnyObject!
    var selector: Selector!
    var action: (() -> Void)!

    override init() { // Initializer does not override a designated initializer from its superclass
        super.init() // Must call a designated initializer of the superclass 'UIButton'
    }

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的UIViewController课程之一:

class CustomAlertView: UIViewController {

    required init(coder aDecoder: …
Run Code Online (Sandbox Code Playgroud)

initializer uiviewcontroller ios swift

37
推荐指数
2
解决办法
4万
查看次数

Swift:覆盖子类中的==仅在超类中调用==

我有一个A符合Equatable协议和实现==功能的类.在子类中,B==用更多的检查覆盖.

但是,当我在两个实例数组B(两者都有类型Array<A>)之间进行比较时,调用==for A.当然,如果我改变两个阵列的类型Array<B>,==对于B被调用.

我提出了以下解决方案:

A.swift:

internal func ==(lhs: A, rhs: A) -> Bool {
    if lhs is B && rhs is B {
        return lhs as! B == rhs as! B
    }
    return ...
}
Run Code Online (Sandbox Code Playgroud)

这看起来很丑陋,必须扩展到每个子类A.有没有办法确保==首先调用子类?

overriding equality swift

27
推荐指数
1
解决办法
8588
查看次数

选项与投掷功能

考虑我编写的以下查找函数,即使用选项和可选绑定,如果在字典中找不到键,则报告消息

func lookUp<T:Equatable>(key:T , dictionary:[T:T]) -> T? {
    for i in dictionary.keys {
       if i == key{
           return dictionary[i]
       }
    }
    return nil
}

let dict = ["JO":"Jordan",
   "UAE":"United Arab Emirates",
   "USA":"United States Of America"
]

if let a = lookUp( "JO",dictionary:dict ) {
    print(a) // prints Jordan 
} else {
    print("cant find value")
}
Run Code Online (Sandbox Code Playgroud)

我已经重写了下面的代码,但这一次,使用错误处理,保护语句,删除-> T?和编写符合以下内容的枚举ErrorType:

enum lookUpErrors : ErrorType {
    case noSuchKeyInDictionary
}

func lookUpThrows<T:Equatable>(key:T , dic:[T:T])throws {
    for i in dic.keys{
        guard i …
Run Code Online (Sandbox Code Playgroud)

swift

18
推荐指数
2
解决办法
1653
查看次数

运算符"+"的模糊使用

所以我在我的Xcode项目中有这个小算法,它不再有效 - 它告诉我,无论我尝试什么,我都无法将数字添加到另一个数字.

注意:
在将目标更改为iOS 7.0之前,一切都运行良好.
我不知道这与它有什么关系,但即使我把它切换回iOS 8它也给了我一个错误,我的构建失败了.

码:

var delayCounter = 100000

for loop in 0...loopNumber {
    let redDelay: NSTimeInterval = NSTimeInterval(arc4random_uniform(100000) + delayCounter) / 30000

    let blueDelay: NSTimeInterval = NSTimeInterval(arc4random_uniform(100000) + delayCounter) / 30000

    let yellowDelay: NSTimeInterval = NSTimeInterval(arc4random_uniform(100000) + delayCounter) / 30000

    let greenDelay: NSTimeInterval = NSTimeInterval(arc4random_uniform(100000) + delayCounter) / 30000
}
Run Code Online (Sandbox Code Playgroud)

backwards-compatibility ios swift xcode6

15
推荐指数
2
解决办法
9201
查看次数

Swift并使用类扩展

我不明白为什么程序员extension在他们的类实现中使用关键字.您可以阅读其他主题,然后代码在语义上更加分离等等.但是当我使用自己的代码时,我觉得使用它会更清晰// MARK - Something.然后当你在Xcode中使用方法列表(ctrl + 6)时,一切都会在第一眼看到.

在Apple文档中,您可以阅读:

"扩展程序为现有的类,结构或枚举类型添加了新功能."

那么为什么不直接在我自己的类中编写我自己的代码呢?不像我想扩展一些外国类的功能,比如,NSURLSession或者Dictionary,你必须使用扩展.

Mattt Thompson在他的Alamofire图书馆中使用扩展,也许他可以给我一点解释,为什么他选择这种方法.

class class-extensions swift alamofire

14
推荐指数
2
解决办法
3472
查看次数

Swift将字符串转换为UnsafeMutablePointer <Int8>

我有一个映射到Swift的C函数定义为:

func swe_set_eph_path(path: UnsafeMutablePointer<Int8>) -> Void
Run Code Online (Sandbox Code Playgroud)

我试图传递一个路径到该功能,并尝试过:

        var path = [Int8](count: 1024, repeatedValue: 0);
        for i in 0...NSBundle.mainBundle().bundlePath.lengthOfBytesUsingEncoding(NSUTF16StringEncoding)-1
        {
            var range = i..<i+1
            path[i] = String.toInt(NSBundle.mainBundle().bundlePath[range])
        }
        println("\(path)")
        swe_set_ephe_path(&path)
Run Code Online (Sandbox Code Playgroud)

但在路径[i]行我得到错误:

'subscript'不可用:不能使用Int范围下标String

swe_set_ephe_path(NSBundle.mainBundle().bundlePath)
Run Code Online (Sandbox Code Playgroud)

也不

swe_set_ephe_path(&NSBundle.mainBundle().bundlePath)
Run Code Online (Sandbox Code Playgroud)

也不工作

除了没有工作,我觉得必须有一个更好,更少复杂的方式来做到这一点.使用CString的StackOverflow以前的答案似乎不再起作用了.有什么建议?

pointers swift xcode6

12
推荐指数
4
解决办法
2万
查看次数

'set'<NSObject>没有名为'anyObject'的成员

今天我用Swift 1.2更新了xcode我的代码在Swift 1.1上工作得很好但是当我更新时我得到了这个错误:

'Set'没有名为'anyObject'的成员

这是我的代码:

override public func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {
    let location:CGPoint? = touches.anyObject()?.locationInView(self)
    if let loc = location {
        if (!CGRectContainsPoint(ScaleRect(self.bounds, n: 2.0), loc)) {
            self.highlighted = false
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

你们有一个想法,我该如何解决这个问题?

object member named swift

11
推荐指数
1
解决办法
7244
查看次数

Swift/iOS:如何在AnyObject/Any或Pointers的函数中使用inout参数

我正在尝试编写一个函数,它接受一个变量指针和一个描述符/键,并为变量设置一个新值.理想情况下,指针应该是对象或基元,但我也可以使用单独的函数(或其他参数).在我的代码中,我也使用键从数据库中检索新值,但在下面的示例中,我使用虚拟值对其进行了简化,以便可以在操场中轻松使用:

import UIKit

func setValue(inout object: AnyObject, key: String) {
    switch key {
    case "String":
        object = "A String"
    case "UIColor":
        object = UIColor.whiteColor()
    case "Bool":
        object = true
    default:
        println("Unhandled key: \(key)")
    }
}

var string: String = "Default String"
var color: UIColor = UIColor.blackColor()
var bool: Bool = false

setValue(&string, "String")
setValue(&color, "UIColor")
setValue(&bool, "Bool")
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

"无法使用类型'的参数列表调用'setValue'(inout String,key String)'"

我知道我在这里混合了对象和原始.我也尝试将其分解并将它们分成两个函数,但即便失败:

func setValue(inout object: AnyObject, key: String) {
    switch key {
    case "UIColor":
        object = UIColor.whiteColor()
    default:
        println("Unhandled key: …
Run Code Online (Sandbox Code Playgroud)

parameters pointers object ios swift

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