小编Air*_*ity的帖子

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万
查看次数

关闭:使用未解析的标识符'self'

我正在解析Swift语言指南教程(来自Apple iOS开发库),每个章节我都会创建一个单独的swift文件.在每个文件中,我创建了多个函数,其中我隔离了它们提供的代码片段.一切都在进行,直到测试闭包的强引用周期.由于某种原因,如果包含闭包的类(用于计算属性)在函数内声明,则闭包不能看到封闭类的"self"引用.有什么想法吗?如果未在函数内声明类,则它可以正常工作.

func strongRefClosure() {
    class HTMLElement {

        let name: String
        let text: String?

        lazy var asHTML: () -> String = {
            if let text = self.text {
                return "<\(self.name)>\(text)</\(self.name)>"
            } else {
                return "<\(self.name) />"
            }
        }

        init(name: String, text: String? = nil) {
            self.name = name
            self.text = text
        }

        deinit {
            println("\(name) is being deinitialized")
        }
    }

    var paragraph: HTMLElement? = HTMLElement(name: "p", text: "hello, world")
    println(paragraph!.asHTML())
}
Run Code Online (Sandbox Code Playgroud)

swift

8
推荐指数
1
解决办法
4642
查看次数

如何在iOS中使用Swift正确检索加速计数据?

我试图从iPhone的加速度计(我自己的iPhone 5s)记录数据,并在屏幕上设置一个标签,使用String(format: "%.2f", data)数据是我要记录的特定轴的值.为此,我设置了CMMotionManager并开始记录加速度计数据,我有一个定时器,可以不断更新标签中的文本.但是,我从Xcode收到错误:"致命错误:在展开Optional值时意外发现nil".这是相关代码:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    //if accelerometer can be used, start it
    if (motionManager.accelerometerAvailable) {

        motionManager.accelerometerUpdateInterval = 0.1

        motionManager.startAccelerometerUpdates()
        let timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("update"), userInfo: nil, repeats: true)
    }



}

func update () {
    if (motionManager.accelerometerActive) {

        accelX.text = String(format: "%.2f", motionManager.accelerometerData.acceleration.x)
    }

}
Run Code Online (Sandbox Code Playgroud)

当我将accelX.text赋值更改为简单字符串时,错误停止,因此我认为创建错误的可选变量与加速度计有关.然而,据我所知,如果你有任何建议,或者我完全错了,并且有更好更简单的方法,如果你帮助我,我一定会很感激.

iphone ios core-motion swift

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

带有p的点表示法,用于swift中的十六进制数字文字

我正在 使用XCode 在https://github.com/nettlep/learn-swift中完成第一个基本操场

这个表达到底发生了什么?

0xC.3p0 == 12.1875
Run Code Online (Sandbox Code Playgroud)

我已经了解了十六进制文字和特殊的"p"符号,它表示2的幂.

0xF == 15

0xFp0 == 15   //  15 * 2^0
Run Code Online (Sandbox Code Playgroud)

如果我尝试0xC.3我得到错误:十六进制浮点文字必须以指数结束.

我发现了数字文字的这个很好的概述另一个深刻的解释,但我没有看到解释是什么的东西.3p0.

我已经将代码分叉并将本课程升级到XCode 7/Swift 2 - 这是具体的一行.

swift

7
推荐指数
1
解决办法
619
查看次数

Swift可选方法参数,但至少需要填充一个参数

我正在使用2个参数在swift中创建一个类的方法,它们都是可选的.但是,我需要至少填充其中一个才能使方法成功运行,哪个无关紧要

func someMethod(arg1: Sometype?, arg2: Sometype?)-> Void {
        //I need at least one argument to 
        //be populated to do what i need
}
Run Code Online (Sandbox Code Playgroud)

在Objective-c中,如果这两个对象都是零,我们可以抛出一个Assert.在Swift中,我想知道是否有更好的方法来做这个而不是断言.

methods optional-parameters swift

6
推荐指数
1
解决办法
571
查看次数

Swift减少一系列元组

有没有办法可以在元组数组上调用reduce函数来查找最大值?

例如

struct Gate{

    var maxedOpenGates = 1

    var GatesOpen : [(openOrdered : Int, gateNum : Int )] = []

    init(defaultSelected : Int = 0){

        GatesOpen.append(openOrdered : 1, gateNum : defaultSelected)
    }

    private func manipulateGates(gates : [SegmentButton]){
        for i in GatesOpen{
            gates[i.gateNum].toggleSelected()
        }

    }

    mutating func openGate(index : Int, buttons : [SegmentButton]){

        if GatesOpen.count < maxedOpenGates{
            GatesOpen.append(  openOrdered: GatesOpen.count , gateNum: index)

        }else{
         //////Finding the gate that was Opened the longest////
            let lastGate = GatesOpen.reduce(Int.min,{ max($0,$1) })

        }
        manipulateGates(buttons)
    } …
Run Code Online (Sandbox Code Playgroud)

swift

6
推荐指数
1
解决办法
1771
查看次数

在Swift中初始化的位置?

关于Swift中的Initialization,我有一个非常普遍的问题.与Objective C不同,现在可以直接在我的函数之外的声明中调用init():例如

class ViewController: UIViewController {
    let myView: UIView = UIView()

    override func viewDidLoad() {
        super.viewDidLoad()

        myView.frame = getFrame()
        myView.backgroundColor = UIColor.redColor()
        self.view.addSubview(myView)

    }

    func getFrame() -> CGRect {
        return CGRectMake(0, 0, 100, 100)
    }
}
Run Code Online (Sandbox Code Playgroud)

在Objective CI中,我将在我的函数中完成初始化.

但是如果我想调用一个没有设置参数的初始化器怎么办?例如,我想用一个在func()中计算的帧初始化

class ViewController: UIViewController {

    //THIS IS NOT WOKRING
    let myView: UIView = UIView(frame: getFrame())

    override func viewDidLoad() {
        super.viewDidLoad()

        myView.backgroundColor = UIColor.redColor()
        self.view.addSubview(myView)

    }

    func getFrame() -> CGRect {
        return CGRectMake(0, 0, 100, 100)
    }
}
Run Code Online (Sandbox Code Playgroud)

我不想在代码中的两个不同位置进行初始化.初始化是否有任何一般模式?

initialization swift

5
推荐指数
1
解决办法
143
查看次数

连接自定义对象数组

我创建了一个自定义对象,其中包含 id、名称和短名称。我只想检索 id 并执行 a 操作,",".join()使其成为一个字符串,例如"1, 2"

那么如何将数组转换var recentArray = Array<News>()为仅 id 以逗号分隔的字符串呢?

定制类

class Team: NSObject{
    var id: Int!
    var name: NSString!
    var shortname: NSString!


    init(id: Int, name:NSString, shortname: NSString) {
        self.id = id
        self.name = name
        self.shortname = shortname
    }


    required convenience init(coder aDecoder: NSCoder) {
        let id = aDecoder.decodeIntegerForKey("id")
        let name = aDecoder.decodeObjectForKey("name") as! String
        let shortname = aDecoder.decodeObjectForKey("shortname") as! String
        self.init(id: id, name: name, shortname: shortname)
    }

    func encodeWithCoder(aCoder: NSCoder) { …
Run Code Online (Sandbox Code Playgroud)

arrays ios swift

5
推荐指数
1
解决办法
3014
查看次数

Swift中的递归块

我一直在尝试将这段代码从Objective-C(取自https://gist.github.com/mikeash/1254684)转换为Swift.我已经成功地使用它来根据API调用的结果重复一段代码.在Swift中有更好的方法吗?

dispatch_block_t recursiveBlockVehicle(void (^block)(dispatch_block_t recurse)) {
    return ^{
        block(recursiveBlockVehicle(block));
    };
}
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏.

recursion swift

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

类似PHP的字符串解析

我正在编写各种迷你控制台,我正试图弄清楚如何从链接中提取内容.例如,在PHP中,这是一个请求变量,因此:

http://somelink.com/somephp.php?variable1=10&variable2=20

然后PHP计算出url参数并将它们分配给变量.

我如何在Swift中解析这样的东西?

所以,给定我想要的字符串:variable1 = 10和variable2 = 20等,有一个简单的方法吗?我试着用Google搜索,但并不知道我在搜索什么.

我有一个非常可怕的hacky方式这样做,但它不是真的可扩展.

string parsing swift

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