我正在尝试编写一个函数,它接受一个变量指针和一个描述符/键,并为变量设置一个新值.理想情况下,指针应该是对象或基元,但我也可以使用单独的函数(或其他参数).在我的代码中,我也使用键从数据库中检索新值,但在下面的示例中,我使用虚拟值对其进行了简化,以便可以在操场中轻松使用:
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) 我正在解析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) 我试图从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赋值更改为简单字符串时,错误停止,因此我认为创建错误的可选变量与加速度计有关.然而,据我所知,如果你有任何建议,或者我完全错了,并且有更好更简单的方法,如果你帮助我,我一定会很感激.
我正在 使用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 - 这是具体的一行.
我正在使用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中,我想知道是否有更好的方法来做这个而不是断言.
有没有办法可以在元组数组上调用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中的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)
我不想在代码中的两个不同位置进行初始化.初始化是否有任何一般模式?
我创建了一个自定义对象,其中包含 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) 我一直在尝试将这段代码从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)
任何帮助表示赞赏.
我正在编写各种迷你控制台,我正试图弄清楚如何从链接中提取内容.例如,在PHP中,这是一个请求变量,因此:
http://somelink.com/somephp.php?variable1=10&variable2=20
然后PHP计算出url参数并将它们分配给变量.
我如何在Swift中解析这样的东西?
所以,给定我想要的字符串:variable1 = 10和variable2 = 20等,有一个简单的方法吗?我试着用Google搜索,但并不知道我在搜索什么.
我有一个非常可怕的hacky方式这样做,但它不是真的可扩展.