Outfielder Nick Swisher has agreed to a four-year, $56 million contract with the Cleveland Indians, a source told ESPN.