我有一个关于C指针和转换的基本问题.
我不明白为什么要施放指针?
我只是尝试了这个代码,我为每个选项获得了相同的输出:
#include <stdio.h>
int main(void)
{
int x = 3;
int *y = &x;
double *s;
option 1: s = (double*)y;
option 1: printf("%p, %d\n", (int*)s, *((int*)s));
option 2: s = y;
option 2: printf("%p, %d", s, *s);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么我必须这样做s = (double*)y
?
直观地说,所有变量的地址都是相同的.差异应该是从该地址读取多少字节.此外,关于打印 - 如果我使用%d
它将自动采取int
.
为什么我需要把它作为一个int*
?
我错了吗?
我正在尝试使用struct
一个键作为键NSDictionary
.根据文档,它必须符合Hashable
协议.
我这样做,但我得到一个错误DateRange
不符合协议Hashable
和Equatable
.我该如何解决这个问题?
这是我的代码:
struct DateRange: Hashable {
var startDate: NSDate {
return self.startDate.timeIntervalSince1970.hashValue
}
var endDate: NSDate {
return self.endDate.timeIntervalSince1970.hashValue
}
}
Run Code Online (Sandbox Code Playgroud) 我需要将播放按钮更改为暂停按钮,反之亦然.我还是新手,所以我不知道如何识别.swift
文件中的按钮或如何在文件中以编程方式更改图标.swift
.
import UIKit
import AVFoundation
class ViewController: UIViewController {
var player = AVAudioPlayer()
var toggleState = 1
@IBAction func playPauseButton(sender: AnyObject) {
if toggleState == 1 {
player.play()
toggleState = 2
} else {
player.pause()
toggleState = 1
}
}
@IBAction func stopButton(sender: AnyObject) {
player.stop()
player.currentTime = 0
}
@IBAction func sliderChanged(sender: AnyObject) {
player.volume = sliderValue.value
}
@IBOutlet weak var sliderValue: UISlider!
override func viewDidLoad() {
super.viewDidLoad()
var audioPath = NSBundle.mainBundle().pathForResource("StarWars", ofType: "mp3")!
var …
Run Code Online (Sandbox Code Playgroud) 在Swift 3中,SE-0065更改了Collection
s 的索引模型,其中索引遍历的责任从索引移动到集合本身.例如,不是写作i.successor()
,而是写作c.index(after: i)
.
这对于String
在某个索引处访问s 意味着什么,而不是写这个:
let aStringName = "Bar Baz"
aStringName[aStringName.startIndex.advancedBy(3)]
Run Code Online (Sandbox Code Playgroud)
......我们现在要写这个:
aStringName[aStringName.index(aStringName.startIndex, offsetBy: 3)]
Run Code Online (Sandbox Code Playgroud)
这看起来非常多余,正如aStringName
所提到的那样.所以我的问题是,如果有办法绕过这个(除了写一个扩展String
)?