- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
大约一周前,我问了这个问题的一部分,但被否决了,所以我花了时间来解决它。我已经弄清楚如何完成在 UIPicker 和函数之间传递的第一部分。我创建了一个类calculateTime(),里面是我的函数,它接受数组作为参数。然后计算出一个数字,我将其标记为计数。接下来我需要做的是将计数传递给 update() 函数,以便我可以使用倒计时器更新我的文本标签。无论我把这个函数放在哪里,我都无法让它工作。如果它在类内部,我会收到选择器错误。如果它在类之外,我无法获取它的计数值。它被我在代码顶部设置的值覆盖。我将所有代码粘贴在这里。我希望有人能在这里帮助我,我对自己无法解决这个问题感到非常沮丧。
import UIKit
import MapKit
import CoreLocation
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate {
@IBOutlet weak var dep: UITextField!
@IBOutlet weak var picker: UIPickerView!
@IBOutlet weak var arrivesAt: UIButton!
@IBOutlet weak var departsFrom: UIButton!
@IBOutlet weak var arr: UITextField!
@IBOutlet weak var countDownLabel: UILabel!
var pickerData: [[String]] = [[String]]()
var timer: NSTimer!
var count = 2
var arrayTimes = [""]
override func viewDidLoad() {
super.viewDidLoad()
calculateTime().refreshView(["5:45", "6:35", "7:00", "7:30", "7:50", "8:20", "8:40", "9:15", "10:10", "11:10", "12:40", "14:15", "14:50", "15:40", "16:10", "17:10", "17:40", "18:40", "19:25", "20:50"])
picker.hidden = true
dep.delegate = self
dep.resignFirstResponder()
arr.resignFirstResponder()
//Picker
// Connect data:
self.picker.delegate = self
self.picker.dataSource = self
// Input data into the Array:
pickerData = [["larkspur", "saulsalito", "san francisco", "fisherman's wharf", "giants stadium", "tiburon", "vallejo", "alameda", "harbor bay", "jack london", "south s.f."],
["san francisco", "saulsalito", "larkspur", "fisherman's wharf", "giants stadium", "tiburon", "vallejo", "alameda", "harbor bay", "jack london", "south s.f."]]
}
//Mark - Location Delegate Methods
struct MyViewState {
static var count = 8
}
class calculateTime {
var timesArray:[String] = []
var timer: NSTimer!
var count: Int = 0
func refreshView(array: [String]) {
let date = NSDate()
let calendar = NSCalendar.currentCalendar()
let components = calendar.components([.Hour, .Minute], fromDate: date)
let hour = components.hour
let minutes = components.minute
let currentTime = "\(hour)" + ":" + "\(minutes)"
self.timesArray = array
print(timesArray)
// create a method to convert your time to minutes
func stringToMinutes(input:String) -> Int {
let components = input.componentsSeparatedByString(":")
let hour = Int((components.first ?? "0")) ?? 0
let minute = Int((components.last ?? "0")) ?? 0
return hour*60 + minute
}
//create an array with the minutes from the original array
let timesMinutesArray:[Int] = timesArray.map { stringToMinutes($0) }
let dayMinute = stringToMinutes(currentTime)
// filter out the times that has already passed
let filteredTimesArray = timesMinutesArray.filter{$0 > dayMinute }
// get the first time in your array
if let firstTime = filteredTimesArray.first {
// find its position and extract it from the original array
let nextDeparture = timesArray[timesMinutesArray.indexOf(firstTime)!] // "15:40"
let userCalendar = NSCalendar.currentCalendar()
let dateMakerFormatter = NSDateFormatter()
dateMakerFormatter.calendar = userCalendar
dateMakerFormatter.dateFormat = "yyyy/MM/dd"
// How many hours and minutes between now and the next ferry
dateMakerFormatter.dateFormat = "H:mm"
let startTime = dateMakerFormatter.dateFromString(currentTime)!
let endTime = dateMakerFormatter.dateFromString(nextDeparture)!
let hourMinuteComponents: NSCalendarUnit = [.Hour, .Minute]
let timeDifference = userCalendar.components(
hourMinuteComponents,
fromDate: startTime,
toDate: endTime,
options: [])
let difference = (timeDifference.hour*60) + (timeDifference.minute)
var count = difference
print(count) //this returns correctly
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: ViewController(), selector: "update", userInfo: nil, repeats: true)
}
}
}
//Picker
// The number of columns of data
func numberOfComponentsInPickerView(picker: UIPickerView) -> Int {
return 2
}
// The number of rows of data
func pickerView(picker: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return pickerData[component].count
}
// The data to return for the row and component (column) that's being passed in
func pickerView(picker: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return pickerData[component][row]
}
//Show picker wen text field is click in
func textFieldShouldBeginEditing(textfield: UITextField) -> Bool {
dep.resignFirstResponder()
arr.resignFirstResponder()
self.dep.tintColor = UIColor.clearColor()
self.arr.tintColor = UIColor.clearColor()
picker.hidden = false
return false
}
//Make text uneditable
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
return false
}
// Catpure the picker view selection
func pickerView(picker: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
// This method is triggered whenever the user makes a change to the picker selection.
// The parameter named row and component represents what was selected.
print("/[component][row]")
let fromto = pickerData[component][row]
print(fromto)
if component == 0 {
var count = calculateTime().count
arr.text = "san francisco"
dep.text = pickerData[component][row]
calculateTime().refreshView(["5:45", "6:35", "7:00", "7:30", "7:50", "8:20", "8:40", "9:15", "10:10", "11:10", "12:40", "14:15", "14:50", "15:40", "16:10", "17:10", "17:40", "18:40", "19:25", "20:50"])
print("help")
self.countDownLabel.text = "\(count)"
print(count)
}
else {
dep.text = pickerData[component][row]
}
picker.hidden = true;
}
func pickerView(picker: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView
{
var pickerLabel = UILabel()
pickerLabel.textColor = UIColor( red: CGFloat(41/255.0), green: CGFloat(100/255.0), blue: CGFloat(226/255.0), alpha: CGFloat(1.0) )
pickerLabel.text = pickerData[component][row]
// pickerLabel.font = UIFont(name: pickerLabel.font.fontName, size: 15)
pickerLabel.font = UIFont(name: "Helvetica Neue", size: 20) // In this use your custom font
pickerLabel.textAlignment = NSTextAlignment.Center
return pickerLabel
}
func pickerView(pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
return 36.0
}
func update() {
if count == 1{
//self.minutes.text = "minute"
print("did change")
}
if(count > 0)
{
//countDownLabel.text = String(count--)
print(count)
}
else if (count == 0)
{
timer.invalidate()
print("ended")
calculateTime().refreshView(["5:45", "6:35", "7:00", "7:30", "7:50", "8:20", "8:40", "9:15", "10:10", "11:10", "12:40", "14:15", "14:50", "15:40", "16:10", "17:10", "17:40", "18:40", "19:25", "20:50"])
}
}
}
最佳答案
您应该在文件的最顶部添加计数变量,以便所有函数都可以在文件中访问它。这样,您将只有一个 count 实例,并且可以从整个文件中的任何位置更新它。即在文件顶部:
var count : Int = calculateTime().count
然后您就可以像在
中一样访问计数update()
函数。
如果它们位于单独的类中,那么您需要创建该类的实例,或者已经传入该类的实例。例如,如果 count 在类 A 中初始化:
public class A {
var count : Int = 0
}
如果您想从 B 类访问该变量,您可以执行以下操作:
public class B {
var classA : A = A()
print("Count : \(classA.count)")
}
这将使您能够访问您创建的 A 实例的计数。或者,在创建 B 类的实例时,您可以在初始化时传递 A 类的适当实例。例如
public class C {
var a : A = A()
var b : B = B(class : a)
}
public class B {
var count : Int
init(class : A = A()) {
count = class.count
}
}
此外,请记住,在 OOP 中,您可能希望使用 getter 和 setter,而不是仅仅公开计数并将计数设置为私有(private)。即
public class A {
private var _count = 0
var count : Int {
get {
return _count
}
set {
if newValue != _count {
_count = newValue
}
}
}
}
public class B {
var classA : A = A()
classA.count = 2 // Would set the count of class A, for the particular instance you have created as 2
}
这也可以让您访问该变量。另外,如果这对您没有帮助,请查看委托(delegate)和协议(protocol),您也可以通过这种方式传递变量。
关于ios - 无法将变量从类中的函数传递到 Swift 中的另一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33758392/
IO 设备如何知道属于它的内存中的值在memory mapped IO 中发生了变化? ? 例如,假设内存地址 0 专用于保存 VGA 设备的背景颜色。当我们更改 memory[0] 中的值时,VGA
我目前正在开发一个使用Facebook sdk登录(通过FBLoginView)的iOS应用。 一切正常,除了那些拥有较旧版本的facebook的人。 当他们按下“使用Facebook登录”按钮时,他
假设我有: this - is an - example - with some - dashesNSRange将使用`rangeOfString:@“-”拾取“-”的第一个实例,但是如果我只想要最后
Card.io SDK提供以下详细信息: 卡号,有效期,月份,年份,CVV和邮政编码。 如何从此SDK获取国家名称。 - (void)userDidProvideCreditCardInfo:(Car
iOS 应用程序如何从网络服务下载图片并在安装过程中将它们安装到用户的 iOS 设备上?可能吗? 最佳答案 您无法控制应用在用户设备上的安装,因此无法在安装过程中下载其他数据。 只需在安装后首次启动应
我曾经开发过一款企业版 iOS 产品,我们公司曾将其出售给大型企业,供他们的员工使用。 该应用程序通过 AppStore 提供,企业用户获得了公司特定的配置文件(包含应用程序配置文件)以启用他们有权使
我正在尝试将 Card.io SDK 集成到我的 iOS 应用程序中。我想为 CardIO ui 做一个简单的本地化,如更改取消按钮标题或“在此保留信用卡”提示文本。 我在 github 上找到了这个
我正在使用 CardIOView 和 CardIOViewDelegate 类,没有可以设置为 YES 的 BOOL 来扫描 collectCardholderName。我可以看到它在 CardIOP
我有一个集成了通话工具包的 voip 应用程序。每次我从我的 voip 应用程序调用时,都会在 native 电话应用程序中创建一个新的最近通话记录。我在 voip 应用程序中也有自定义联系人(电话应
iOS 应用程序如何知道应用程序打开时屏幕上是否已经有键盘?应用程序运行后,它可以接收键盘显示/隐藏通知。但是,如果应用程序在分屏模式下作为辅助应用程序打开,而主应用程序已经显示键盘,则辅助应用程序不
我在模拟器中收到以下错误: ImageIO: CGImageReadSessionGetCachedImageBlockData *** CGImageReadSessionGetCachedIm
如 Apple 文档所示,可以通过 EAAccessory Framework 与经过认证的配件(由 Apple 认证)进行通信。但是我有点困惑,因为一些帖子告诉我它也可以通过 CoreBluetoo
尽管现在的调试器已经很不错了,但有时找出应用程序中正在发生的事情的最好方法仍然是古老的 NSLog。当您连接到计算机时,这样做很容易; Xcode 会帮助弹出日志查看器面板,然后就可以了。当您不在办公
在我的 iOS 应用程序中,我定义了一些兴趣点。其中一些有一个 Kontakt.io 信标的名称,它绑定(bind)到一个特定的 PoI(我的意思是通常贴在信标标签上的名称)。现在我想在附近发现信标,
我正在为警报提示创建一个 trigger.io 插件。尝试从警报提示返回数据。这是我的代码: // Prompt + (void)show_prompt:(ForgeTask*)task{
您好,我是 Apple iOS 的新手。我阅读并搜索了很多关于推送通知的文章,但我没有发现任何关于 APNS 从 io4 到 ios 6 的新更新的信息。任何人都可以向我提供 APNS 如何在 ios
UITabBar 的高度似乎在 iOS 7 和 8/9/10/11 之间发生了变化。我发布这个问题是为了让其他人轻松找到答案。 那么:在 iPhone 和 iPad 上的 iOS 8/9/10/11
我想我可以针对不同的 iOS 版本使用不同的 Storyboard。 由于 UI 的差异,我将创建下一个 Storyboard: Main_iPhone.storyboard Main_iPad.st
我正在写一些东西,我将使用设备的 iTunes 库中的一部分音轨来覆盖 2 个视频的组合,例如: AVMutableComposition* mixComposition = [[AVMutableC
我创建了一个简单的 iOS 程序,可以顺利编译并在 iPad 模拟器上运行良好。当我告诉 XCode 4 使用我连接的 iPad 设备时,无法编译相同的程序。问题似乎是当我尝试使用附加的 iPad 时
我是一名优秀的程序员,十分优秀!